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

.. only:: html

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

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

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

.. _sphx_glr_examples_04-Icepak_Sherlock_Example.py:


Icepak: setup from Sherlock inputs
-----------------------------------
This example shows how you can create an Icepak project from Sherlock
files (STEP and CSV) and an AEDB board.

.. GENERATED FROM PYTHON SOURCE LINES 8-11

Perform required imports
~~~~~~~~~~~~~~~~~~~~~~~~
Perform required imports and set paths.

.. GENERATED FROM PYTHON SOURCE LINES 11-21

.. code-block:: Python


    import time
    import os
    import pyaedt
    import datetime

    # Set paths
    project_folder = pyaedt.generate_unique_folder_name()
    input_dir = pyaedt.downloads.download_sherlock(destination=project_folder)








.. GENERATED FROM PYTHON SOURCE LINES 22-25

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

.. GENERATED FROM PYTHON SOURCE LINES 25-28

.. code-block:: Python


    aedt_version = "2024.1"








.. GENERATED FROM PYTHON SOURCE LINES 29-33

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

.. GENERATED FROM PYTHON SOURCE LINES 33-36

.. code-block:: Python


    non_graphical = False








.. GENERATED FROM PYTHON SOURCE LINES 37-41

Define variables
~~~~~~~~~~~~~~~~
Define input variables. The following code creates all input variables that are needed
to run this example.

.. GENERATED FROM PYTHON SOURCE LINES 41-50

.. code-block:: Python


    material_name = "MaterialExport.csv"
    component_properties = "TutorialBoardPartsList.csv"
    component_step = "TutorialBoard.stp"
    aedt_odb_project = "SherlockTutorial.aedt"
    aedt_odb_design_name = "PCB"
    stackup_thickness = 2.11836
    outline_polygon_name = "poly_14188"








.. GENERATED FROM PYTHON SOURCE LINES 51-54

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

.. GENERATED FROM PYTHON SOURCE LINES 54-64

.. code-block:: Python


    d = pyaedt.launch_desktop(specified_version=aedt_version, non_graphical=non_graphical, new_desktop_session=True)

    start = time.time()
    material_list = os.path.join(input_dir, material_name)
    component_list = os.path.join(input_dir, component_properties)
    validation = os.path.join(project_folder, "validation.log")
    file_path = os.path.join(input_dir, component_step)
    project_name = os.path.join(project_folder, component_step[:-3] + "aedt")





.. 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 9008 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:383: ResourceWarning: unclosed file <_io.TextIOWrapper name='D:\\Temp\\pyaedt_ansys.log' mode='a' encoding='cp1252'>
      self._logger = val




.. GENERATED FROM PYTHON SOURCE LINES 65-68

Create Icepak project
~~~~~~~~~~~~~~~~~~~~~
Create an Icepak project.

.. GENERATED FROM PYTHON SOURCE LINES 68-71

.. code-block:: Python


    ipk = pyaedt.Icepak(project_name)








.. GENERATED FROM PYTHON SOURCE LINES 72-75

Delete region to speed up import
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Delete the region and disable autosave to speed up the import.

.. GENERATED FROM PYTHON SOURCE LINES 75-80

.. code-block:: Python


    d.disable_autosave()
    ipk.modeler.delete("Region")
    component_name = "from_ODB"








.. GENERATED FROM PYTHON SOURCE LINES 81-84

Import PCB from AEDB file
~~~~~~~~~~~~~~~~~~~~~~~~~
Import a PCB from an AEDB file.

.. GENERATED FROM PYTHON SOURCE LINES 84-89

.. code-block:: Python


    odb_path = os.path.join(input_dir, aedt_odb_project)
    ipk.create_pcb_from_3dlayout(component_name=component_name, project_name=odb_path, design_name=aedt_odb_design_name,
                                 extenttype="Polygon")





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

 .. code-block:: none

    C:\actions-runner\_work\pyaedt\pyaedt\.venv\lib\site-packages\pyaedt\icepak.py:2561: DeprecationWarning: ``extenttype`` was deprecated in 0.6.43. Use ``extent_type`` instead.
      warnings.warn(

    <pyaedt.modules.Boundary.NativeComponentObject object at 0x000002260162E8C0>



.. GENERATED FROM PYTHON SOURCE LINES 90-94

Create offset coordinate system
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create an offset coordinate system to match ODB++ with the
Sherlock STEP file.

.. GENERATED FROM PYTHON SOURCE LINES 94-97

.. code-block:: Python


    ipk.modeler.create_coordinate_system(origin=[0, 0, stackup_thickness / 2], mode="view", view="XY")





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

 .. code-block:: none


    <pyaedt.modeler.cad.Modeler.CoordinateSystem object at 0x000002264A685930>



.. GENERATED FROM PYTHON SOURCE LINES 98-101

Import CAD file
~~~~~~~~~~~~~~~
Import a CAD file.

.. GENERATED FROM PYTHON SOURCE LINES 101-104

.. code-block:: Python


    ipk.modeler.import_3d_cad(file_path, refresh_all_ids=False)





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 105-108

Save CAD file
~~~~~~~~~~~~~
Save the CAD file and refresh the properties from the parsing of the AEDT file.

.. GENERATED FROM PYTHON SOURCE LINES 108-111

.. code-block:: Python


    ipk.save_project(refresh_obj_ids_after_save=True)





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 112-115

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

.. GENERATED FROM PYTHON SOURCE LINES 115-118

.. code-block:: Python


    ipk.plot(show=False, export_path=os.path.join(project_folder, "Sherlock_Example.jpg"), plot_air_objects=False)




.. image-sg:: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_001.png
   :alt: Sherlock Example
   :srcset: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_001.png
   :class: sphx-glr-single-img


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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 119-122

Delete PCB objects
~~~~~~~~~~~~~~~~~~
Delete the PCB objects.

.. GENERATED FROM PYTHON SOURCE LINES 122-125

.. code-block:: Python


    ipk.modeler.delete_objects_containing("pcb", False)





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 126-129

Create region
~~~~~~~~~~~~~
Create an air region.

.. GENERATED FROM PYTHON SOURCE LINES 129-132

.. code-block:: Python


    ipk.modeler.create_air_region(*[20, 20, 300, 20, 20, 300])





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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 133-136

Assign materials
~~~~~~~~~~~~~~~~
Assign materials from Sherlock file.

.. GENERATED FROM PYTHON SOURCE LINES 136-139

.. code-block:: Python


    ipk.assignmaterial_from_sherlock_files(component_list, material_list)





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 140-143

Delete objects with no material assignments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Delete objects with no materials assignments.

.. GENERATED FROM PYTHON SOURCE LINES 143-148

.. code-block:: Python


    no_material_objs = ipk.modeler.get_objects_by_material("")
    ipk.modeler.delete(no_material_objs)
    ipk.save_project()





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 149-152

Assign power to component blocks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Assign power to component blocks.

.. GENERATED FROM PYTHON SOURCE LINES 152-155

.. code-block:: Python


    all_objects = ipk.modeler.object_names








.. GENERATED FROM PYTHON SOURCE LINES 156-159

Assign power blocks
~~~~~~~~~~~~~~~~~~~
Assign power blocks from the Sherlock file.

.. GENERATED FROM PYTHON SOURCE LINES 159-162

.. code-block:: Python


    total_power = ipk.assign_block_from_sherlock_file(csv_name=component_list)








.. GENERATED FROM PYTHON SOURCE LINES 163-166

Plot model
~~~~~~~~~~
Plot the model again now that materials are assigned.

.. GENERATED FROM PYTHON SOURCE LINES 166-169

.. code-block:: Python


    ipk.plot(show=False, export_path=os.path.join(project_folder, "Sherlock_Example.jpg"), plot_air_objects=False)




.. image-sg:: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_002.png
   :alt: Sherlock Example
   :srcset: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_002.png
   :class: sphx-glr-single-img


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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 170-173

Set up boundaries
~~~~~~~~~~~~~~~~~
Set up boundaries.

.. GENERATED FROM PYTHON SOURCE LINES 173-188

.. code-block:: Python


    # Mesh settings that is tailored for PCB
    # Max iterations is set to 20 for quick demonstration, please increase to at least 100 for better accuracy.

    ipk.globalMeshSettings(3, gap_min_elements='1', noOgrids=True, MLM_en=True,
                                MLM_Type='2D', edge_min_elements='2', object='Region')

    setup1 = ipk.create_setup()
    setup1.props["Solution Initialization - Y Velocity"] = "1m_per_sec"
    setup1.props["Radiation Model"] = "Discrete Ordinates Model"
    setup1.props["Include Gravity"] = True
    setup1.props["Secondary Gradient"] = True
    setup1.props["Convergence Criteria - Max Iterations"] = 10
    ipk.assign_openings(ipk.modeler.get_object_faces("Region"))





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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 189-191

Create point monitor
~~~~~~~~~~~~~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 191-199

.. code-block:: Python


    point1 = ipk.assign_point_monitor(ipk.modeler["COMP_U10"].top_face_z.center, monitor_name="Point1")
    ipk.modeler.set_working_coordinate_system("Global")
    line = ipk.modeler.create_polyline(
        [ipk.modeler["COMP_U10"].top_face_z.vertices[0].position, ipk.modeler["COMP_U10"].top_face_z.vertices[2].position],
        non_model=True)
    ipk.post.create_report(expressions="Point1.Temperature", primary_sweep_variable="X")





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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 200-204

Check for intersections
~~~~~~~~~~~~~~~~~~~~~~~
Check for intersections using validation and fix them by
assigning priorities.

.. GENERATED FROM PYTHON SOURCE LINES 204-207

.. code-block:: Python


    ipk.assign_priority_on_intersections()





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 208-210

Compute power budget
~~~~~~~~~~~~~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 210-214

.. code-block:: Python


    power_budget, total = ipk.post.power_budget("W" )
    print(total)





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

 .. code-block:: none

    98.50000000000057




.. GENERATED FROM PYTHON SOURCE LINES 215-217

Analyze the model
~~~~~~~~~~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 217-221

.. code-block:: Python


    ipk.analyze(cores=4, tasks=4)
    ipk.save_project()





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

 .. code-block:: none


    True



.. GENERATED FROM PYTHON SOURCE LINES 222-224

Get solution data and plots
~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 224-229

.. code-block:: Python


    plot1 = ipk.post.create_fieldplot_surface(ipk.modeler["COMP_U10"].faces, "SurfTemperature")
    ipk.post.plot_field("SurfPressure", ipk.modeler["COMP_U10"].faces, show=False, export_path=ipk.working_directory)





.. image-sg:: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_003.png
   :alt: Sherlock Example
   :srcset: /examples/04-Icepak/images/sphx_glr_Sherlock_Example_003.png
   :class: sphx-glr-single-img


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

 .. code-block:: none


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



.. GENERATED FROM PYTHON SOURCE LINES 230-233

Save project and release AEDT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Save the project and release AEDT.

.. GENERATED FROM PYTHON SOURCE LINES 233-242

.. code-block:: Python


    ipk.save_project()

    end = time.time() - start
    print("Elapsed time: {}".format(datetime.timedelta(seconds=end)))
    print("Project Saved in {} ".format(ipk.project_file))
    ipk.release_desktop()






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

 .. code-block:: none

    Elapsed time: 0:19:14.242801
    Project Saved in D:/Temp/pyaedt_prj_2D3/TutorialBoard.aedt 

    True




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

   **Total running time of the script:** (19 minutes 30.642 seconds)


.. _sphx_glr_download_examples_04-Icepak_Sherlock_Example.py:

.. only:: html

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

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

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

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

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


.. only:: html

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

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