.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples\05-Q3D\Q2D_Example_CPWG.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_CPWG.py: 2D Extractor: CPWG analysis --------------------------- This example shows how you can use PyAEDT to create a CPWG (coplanar waveguide with ground) 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-30 .. code-block:: Python non_graphical = False .. GENERATED FROM PYTHON SOURCE LINES 31-35 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 35-42 .. code-block:: Python q = pyaedt.Q2d(specified_version=aedt_version, non_graphical=non_graphical, new_desktop_session=True, projectname=pyaedt.generate_unique_name("pyaedt_q2d_example"), designname="coplanar_waveguide") .. 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 9828 is still running _warn("subprocess %s is still running" % self.pid, C:\actions-runner\_work\pyaedt\pyaedt\testenv\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 .. GENERATED FROM PYTHON SOURCE LINES 43-46 Define variables ~~~~~~~~~~~~~~~~ Define variables. .. GENERATED FROM PYTHON SOURCE LINES 46-71 .. code-block:: Python e_factor = "e_factor" sig_bot_w = "sig_bot_w" co_gnd_w = "gnd_w" clearance = "clearance" cond_h = "cond_h" d_h = "d_h" sm_h = "sm_h" for var_name, var_value in { "sig_bot_w": "150um", "e_factor": "2", "gnd_w": "500um", "clearance": "150um", "cond_h": "50um", "d_h": "150um", "sm_h": "20um", }.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_bot_w) co_gnd_top_w = "({1}-{0}*2)".format(delta_w_half, co_gnd_w) model_w = "{}*2+{}*2+{}".format(co_gnd_w, clearance, sig_bot_w) .. GENERATED FROM PYTHON SOURCE LINES 72-75 Create primitives ~~~~~~~~~~~~~~~~~ Create primitives and define the layer heights. .. GENERATED FROM PYTHON SOURCE LINES 75-81 .. code-block:: Python layer_1_lh = 0 layer_1_uh = cond_h layer_2_lh = layer_1_uh + "+" + d_h layer_2_uh = layer_2_lh + "+" + cond_h .. GENERATED FROM PYTHON SOURCE LINES 82-85 Create signal ~~~~~~~~~~~~~ Create a signal. .. GENERATED FROM PYTHON SOURCE LINES 85-92 .. code-block:: Python base_line_obj = q.modeler.create_polyline(points=[[0, layer_2_lh, 0], [sig_bot_w, layer_2_lh, 0]], name="signal") 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), 0, 0]) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 93-96 Create coplanar ground ~~~~~~~~~~~~~~~~~~~~~~ Create a coplanar ground. .. GENERATED FROM PYTHON SOURCE LINES 96-108 .. 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(assignment=[top_line_obj], vector=[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+{}".format(co_gnd_w, clearance, sig_bot_w), 0, 0]) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 109-112 Create reference ground plane ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a reference ground plane. .. GENERATED FROM PYTHON SOURCE LINES 112-115 .. code-block:: Python q.modeler.create_rectangle(origin=[0, layer_1_lh, 0], sizes=[model_w, cond_h], name="ref_gnd") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 116-119 Create dielectric ~~~~~~~~~~~~~~~~~ Create a dielectric. .. GENERATED FROM PYTHON SOURCE LINES 119-124 .. code-block:: Python q.modeler.create_rectangle( origin=[0, layer_1_uh, 0], sizes=[model_w, d_h], name="Dielectric", material="FR4_epoxy" ) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 125-128 Create conformal coating ~~~~~~~~~~~~~~~~~~~~~~~~ Create a conformal coating. .. GENERATED FROM PYTHON SOURCE LINES 128-158 .. code-block:: Python sm_obj_list = [] ids = [1, 2, 3] if aedt_version >= "2023.1": ids = [0, 1, 2] for obj_name in ["signal", "co_gnd_left", "co_gnd_right"]: obj = q.modeler.get_object_from_name(obj_name) e_obj_list = [] for i in ids: e_obj = q.modeler.create_object_from_edge(obj.edges[i]) e_obj_list.append(e_obj) e_obj_1 = e_obj_list[0] q.modeler.unite(e_obj_list) new_obj = q.modeler.sweep_along_vector(e_obj_1.id, [0, sm_h, 0]) sm_obj_list.append(e_obj_1) new_obj = q.modeler.create_rectangle(origin=[co_gnd_w, layer_2_lh, 0], sizes=[clearance, sm_h]) sm_obj_list.append(new_obj) new_obj = q.modeler.create_rectangle(origin=[co_gnd_w, layer_2_lh, 0], sizes=[clearance, sm_h]) q.modeler.move([new_obj], [sig_bot_w + "+" + clearance, 0, 0]) sm_obj_list.append(new_obj) sm_obj = sm_obj_list[0] q.modeler.unite(sm_obj_list) sm_obj.material_name = "SolderMask" sm_obj.color = (0, 150, 100) sm_obj.name = "solder_mask" .. GENERATED FROM PYTHON SOURCE LINES 159-162 Assign conductor ~~~~~~~~~~~~~~~~ Assign a conductor to the signal. .. GENERATED FROM PYTHON SOURCE LINES 162-167 .. code-block:: Python obj = q.modeler.get_object_from_name("signal") 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 168-171 Create reference ground ~~~~~~~~~~~~~~~~~~~~~~~ Create a reference ground. .. GENERATED FROM PYTHON SOURCE LINES 171-176 .. code-block:: Python obj = [q.modeler.get_object_from_name(i) for i in ["co_gnd_left", "co_gnd_right", "ref_gnd"]] 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 177-180 Assign Huray model on signal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Assign the Huray model on the signal. .. GENERATED FROM PYTHON SOURCE LINES 180-184 .. code-block:: Python obj = q.modeler.get_object_from_name("signal") 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 185-188 Create setup, analyze, and plot ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create the setup, analyze it, and plot solution data. .. GENERATED FROM PYTHON SOURCE LINES 188-207 .. code-block:: Python setup = q.create_setup(name="new_setup") 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() q.analyze() a = q.post.get_solution_data(expressions="Z0(signal,signal)", context="Original") a.plot() .. image-sg:: /examples/05-Q3D/images/sphx_glr_Q2D_Example_CPWG_001.png :alt: Simulation Results Plot :srcset: /examples/05-Q3D/images/sphx_glr_Q2D_Example_CPWG_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.
.. GENERATED FROM PYTHON SOURCE LINES 208-211 Save project and close AEDT ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Save the project and close AEDT. .. GENERATED FROM PYTHON SOURCE LINES 211-215 .. code-block:: Python home = os.path.expanduser("~") q.save_project(os.path.join(home, "Downloads", "pyaedt_example", q.project_name + ".aedt")) q.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 18.616 seconds) .. _sphx_glr_download_examples_05-Q3D_Q2D_Example_CPWG.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_CPWG.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: Q2D_Example_CPWG.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_