.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples\05-Q3D\Q2D_Example_Stripline.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_05-Q3D_Q2D_Example_Stripline.py: 2D Extractor: stripline analysis -------------------------------- This example shows how you can use PyAEDT to create a differential stripline design in 2D Extractor and run a simulation. .. GENERATED FROM PYTHON SOURCE LINES 8-11 Perform required imports ~~~~~~~~~~~~~~~~~~~~~~~~ Perform required imports. .. GENERATED FROM PYTHON SOURCE LINES 11-15 .. code-block:: Python import os import pyaedt .. 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-31 .. code-block:: Python non_graphical = False project_path = pyaedt.generate_unique_project_name() .. GENERATED FROM PYTHON SOURCE LINES 32-36 Launch AEDT and 2D Extractor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Launch AEDT 2023 R2 in graphical mode and launch 2D Extractor. This example uses SI units. .. GENERATED FROM PYTHON SOURCE LINES 36-44 .. code-block:: Python q = pyaedt.Q2d(project=project_path, design="differential_stripline", version=aedt_version, non_graphical=non_graphical, new_desktop=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 11000 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:428: ResourceWarning: unclosed file <_io.TextIOWrapper name='D:\\Temp\\pyaedt_ansys.log' mode='a' encoding='cp1252'> self._logger = val .. GENERATED FROM PYTHON SOURCE LINES 45-48 Define variables ~~~~~~~~~~~~~~~~ Define variables. .. GENERATED FROM PYTHON SOURCE LINES 48-76 .. code-block:: Python e_factor = "e_factor" sig_w = "sig_bot_w" sig_gap = "sig_gap" co_gnd_w = "gnd_w" clearance = "clearance" cond_h = "cond_h" core_h = "core_h" pp_h = "pp_h" for var_name, var_value in { "e_factor": "2", "sig_bot_w": "150um", "sig_gap": "150um", "gnd_w": "500um", "clearance": "150um", "cond_h": "17um", "core_h": "150um", "pp_h": "150um", }.items(): q[var_name] = var_value delta_w_half = "({0}/{1})".format(cond_h, e_factor) sig_top_w = "({1}-{0}*2)".format(delta_w_half, sig_w) co_gnd_top_w = "({1}-{0}*2)".format(delta_w_half, co_gnd_w) model_w = "{}*2+{}*2+{}*2+{}".format(co_gnd_w, clearance, sig_w, sig_gap) .. GENERATED FROM PYTHON SOURCE LINES 77-80 Create primitives ~~~~~~~~~~~~~~~~~ Create primitives and define the layer heights. .. GENERATED FROM PYTHON SOURCE LINES 80-88 .. code-block:: Python layer_1_lh = 0 layer_1_uh = cond_h layer_2_lh = layer_1_uh + "+" + core_h layer_2_uh = layer_2_lh + "+" + cond_h layer_3_lh = layer_2_uh + "+" + pp_h layer_3_uh = layer_3_lh + "+" + cond_h .. GENERATED FROM PYTHON SOURCE LINES 89-92 Create positive signal ~~~~~~~~~~~~~~~~~~~~~~ Create a positive signal. .. GENERATED FROM PYTHON SOURCE LINES 92-109 .. code-block:: Python base_line_obj = q.modeler.create_polyline([[0, layer_2_lh, 0], [sig_w, layer_2_lh, 0]], name="signal_p") top_line_obj = q.modeler.create_polyline([[0, layer_2_uh, 0], [sig_top_w, layer_2_uh, 0]]) q.modeler.move([top_line_obj], [delta_w_half, 0, 0]) q.modeler.connect([base_line_obj, top_line_obj]) q.modeler.move([base_line_obj], ["{}+{}".format(co_gnd_w, clearance), 0, 0]) # Create negative signal # ~~~~~~~~~~~~~~~~~~~~~~ # Create a negative signal. base_line_obj = q.modeler.create_polyline(points=[[0, layer_2_lh, 0], [sig_w, layer_2_lh, 0]], name="signal_n") top_line_obj = q.modeler.create_polyline(points=[[0, layer_2_uh, 0], [sig_top_w, layer_2_uh, 0]]) q.modeler.move(assignment=[top_line_obj], vector=[delta_w_half, 0, 0]) q.modeler.connect([base_line_obj, top_line_obj]) q.modeler.move(assignment=[base_line_obj], vector=["{}+{}+{}+{}".format(co_gnd_w, clearance, sig_w, sig_gap), 0, 0]) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 110-113 Create coplanar ground ~~~~~~~~~~~~~~~~~~~~~~ Create a coplanar ground. .. GENERATED FROM PYTHON SOURCE LINES 113-125 .. code-block:: Python base_line_obj = q.modeler.create_polyline(points=[[0, layer_2_lh, 0], [co_gnd_w, layer_2_lh, 0]], name="co_gnd_left") top_line_obj = q.modeler.create_polyline(points=[[0, layer_2_uh, 0], [co_gnd_top_w, layer_2_uh, 0]]) q.modeler.move([top_line_obj], [delta_w_half, 0, 0]) q.modeler.connect([base_line_obj, top_line_obj]) base_line_obj = q.modeler.create_polyline(points=[[0, layer_2_lh, 0], [co_gnd_w, layer_2_lh, 0]], name="co_gnd_right") top_line_obj = q.modeler.create_polyline(points=[[0, layer_2_uh, 0], [co_gnd_top_w, layer_2_uh, 0]]) q.modeler.move(assignment=[top_line_obj], vector=[delta_w_half, 0, 0]) q.modeler.connect([base_line_obj, top_line_obj]) q.modeler.move(assignment=[base_line_obj], vector=["{}+{}*2+{}*2+{}".format(co_gnd_w, clearance, sig_w, sig_gap), 0, 0]) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 126-129 Create reference ground plane ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a reference ground plane. .. GENERATED FROM PYTHON SOURCE LINES 129-133 .. code-block:: Python q.modeler.create_rectangle(origin=[0, layer_1_lh, 0], sizes=[model_w, cond_h], name="ref_gnd_u") q.modeler.create_rectangle(origin=[0, layer_3_lh, 0], sizes=[model_w, cond_h], name="ref_gnd_l") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 134-137 Create dielectric ~~~~~~~~~~~~~~~~~ Create a dielectric. .. GENERATED FROM PYTHON SOURCE LINES 137-148 .. code-block:: Python q.modeler.create_rectangle( origin=[0, layer_1_uh, 0], sizes=[model_w, core_h], name="Core", material="FR4_epoxy" ) q.modeler.create_rectangle( origin=[0, layer_2_uh, 0], sizes=[model_w, pp_h], name="Prepreg", material="FR4_epoxy" ) q.modeler.create_rectangle( origin=[0, layer_2_lh, 0], sizes=[model_w, cond_h], name="Filling", material="FR4_epoxy" ) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 149-152 Assign conductors ~~~~~~~~~~~~~~~~~ Assign conductors to the signal. .. GENERATED FROM PYTHON SOURCE LINES 152-161 .. code-block:: Python obj = q.modeler.get_object_from_name("signal_p") q.assign_single_conductor(assignment=[obj], name=obj.name, conductor_type="SignalLine", solve_option="SolveOnBoundary", units="mm") obj = q.modeler.get_object_from_name("signal_n") q.assign_single_conductor(assignment=[obj], name=obj.name, conductor_type="SignalLine", solve_option="SolveOnBoundary", units="mm") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 162-165 Create reference ground ~~~~~~~~~~~~~~~~~~~~~~~ Create a reference ground. .. GENERATED FROM PYTHON SOURCE LINES 165-170 .. code-block:: Python obj = [q.modeler.get_object_from_name(i) for i in ["co_gnd_left", "co_gnd_right", "ref_gnd_u", "ref_gnd_l"]] q.assign_single_conductor(assignment=obj, name="gnd", conductor_type="ReferenceGround", solve_option="SolveOnBoundary", units="mm") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 171-174 Assign Huray model on signals ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Assign the Huray model on the signals. .. GENERATED FROM PYTHON SOURCE LINES 174-181 .. code-block:: Python obj = q.modeler.get_object_from_name("signal_p") q.assign_huray_finitecond_to_edges(obj.edges, radius="0.5um", ratio=3, name="b_" + obj.name) obj = q.modeler.get_object_from_name("signal_n") q.assign_huray_finitecond_to_edges(obj.edges, radius="0.5um", ratio=3, name="b_" + obj.name) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 182-185 Define differential pair ~~~~~~~~~~~~~~~~~~~~~~~~ Define the differential pair. .. GENERATED FROM PYTHON SOURCE LINES 185-189 .. code-block:: Python matrix = q.insert_reduced_matrix(operation_name=q.MATRIXOPERATIONS.DiffPair, assignment=["signal_p", "signal_n"], reduced_matrix="diff_pair") .. GENERATED FROM PYTHON SOURCE LINES 190-193 Create setup, analyze, and plot ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a setup, analyze, and plot solution data. .. GENERATED FROM PYTHON SOURCE LINES 193-220 .. code-block:: Python # Create a setup. setup = q.create_setup(name="new_setup") # Add a sweep. sweep = setup.add_sweep(name="sweep1", sweep_type="Discrete") sweep.props["RangeType"] = "LinearStep" sweep.props["RangeStart"] = "1GHz" sweep.props["RangeStep"] = "100MHz" sweep.props["RangeEnd"] = "5GHz" sweep.props["SaveFields"] = False sweep.props["SaveRadFields"] = False sweep.props["Type"] = "Interpolating" sweep.update() # Analyze the nominal design and plot characteristic impedance. q.analyze() plot_sources = matrix.get_sources_for_plot(category="Z0") a = q.post.get_solution_data(expressions=plot_sources, context=matrix.name) a.plot(snapshot_path=os.path.join(q.working_directory, "plot.jpg")) # Save plot as jpg # Add a parametric sweep and analyze. parametric = q.parametrics.add(variable="sig_bot_w", start_point=75, end_point=100, step=5, variation_type="LinearStep") parametric.add_variation(sweep_variable="sig_gap", start_point="100um", end_point="200um", step=5, variation_type="LinearCount") q.analyze_setup(name=parametric.name) .. image-sg:: /examples/05-Q3D/images/sphx_glr_Q2D_Example_Stripline_001.png :alt: Simulation Results Plot :srcset: /examples/05-Q3D/images/sphx_glr_Q2D_Example_Stripline_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 221-224 Save project and release AEDT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Save the project and release AEDT. .. GENERATED FROM PYTHON SOURCE LINES 224-226 .. code-block:: Python q.save_project() q.release_desktop() .. rst-class:: sphx-glr-script-out .. code-block:: none True .. rst-class:: sphx-glr-timing **Total running time of the script:** (3 minutes 34.727 seconds) .. _sphx_glr_download_examples_05-Q3D_Q2D_Example_Stripline.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: Q2D_Example_Stripline.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: Q2D_Example_Stripline.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_