Thermal Results Visualization – Ansys SIWave Icepak and Ansys Electronics Desktop Icepak

As a typically mechanical / systems engineer, I am not exactly qualified to go through and list exactly what SIWave does and why you need it for any given situation (shoutout to Aleksandr, our actual expert, whose assistance has been invaluable for my simple example case). However, what I think I have grasped is that SIWave is just one of those Ansys tools where if you need it, you probably really need it. Where this becomes relevant to me is of course in a PCB thermal analysis. DCIR is typically the electrical half of this problem that is within SIWave’s expansive toolkit, though SIWave also contains some very easy-to-use thermal-oriented options for co-simulation with Icepak. I’ll admit that I have tended to somewhat dismiss this on my end, as I am already familiar with a couple more advanced thermal analysis tools, so why wouldn’t I just use these if I wanted to look at the thermal response of A PCB? Despite this, I have recently (begrudgingly) taken a more in-depth look at the thermal side of SIWave, and what I have found is that even if the settings available are a little more simplistic than I might always like, it really is incredibly accessible and provides some nice visualization capability. What’s more, it provides not only an easy path to view your existing thermal results in a full Icepak interface, but also serves as a great starting point if you need to analyze some more complex setups than Icepak.

So, having just been through much of this on my own, it seems like a great opportunity to share some tips and tricks for thermal visualization in both Ansys SIWave and Ansys Electronics Desktop (EDT) Icepak, see where each is strong relative to the other, and then perhaps even share some suggestions for using the SIWave solution as a starting point to take an Icepak PCB simulation to the next level!

To start with, we need a SIWave DCIR project. A DCIR solution is required for providing thermal loads for a thermal solution. I am glossing over this, but basically, you need a PCB definition, a voltage source, and a current source. In the model I borrowed from Aleks, I am using these sources to push some current through one section of my PCB’s power layer and then referencing them to the ground layer. To complete the loop. This means that there are EM losses on both the ground layer and power layer.

For the first simulation, we’ll want to set a baseline temperature for our electrical material properties and make sure the toggle for “Export power dissipation for use in ANSYS Icepak and Mechanical” is enabled.

Now, we can set up an Icepak simulation! As I alluded to, the settings available within SIWave are somewhat primitive, although they do an overall good job of adhering to typical best practices. Our choices are basically using a board model without components and strictly modeling thermal conduction within that board, using a board model with components that includes explicit thermal convection to the environment, manipulating a mesh detail slider bar, and choosing the cooling regime used (natural vs forced convection). For this model, I’ll be using forced convection with surface components and “Detailed” meshing so that I have the most to look at, but obviously the exact settings will vary somewhat depending on your use-case. In 2021R2, the default SIWave-Icepak behavior will be to use EDT Icepak as the solver, however, we can choose to specify “Use Classic Icepak” in the simulation setup window. This determines which version of Icepak we have to use for additional postprocessing in as well, so I will leave “Use Classic Icepak” turned off.

The first method of visualization in SIWave is to simply right-click an Icepak simulation definition in the “Results” window and Display temperature.

This gives us a nice temperature contour on the outer surface of all the solid bodies considered during the simulation. If we stick with the top-down view, we can make use of a nice temperature probe that automatically displays at the mouse location. Once we rotate around into a 3D view with the middle mouse button or other view options, we lose this probe but of course, gain a nice graphical representation of the full geometry.

The second method is to use the View > Temperature Plots toolbar option, which gives us some more flexibility for viewing temperature through each layer.

Most commonly, we will probably be working with the XY cutting plane and then selecting the layer of interest from the drop-down menu so that we can see a plane through the entire PCB. For more precise control, we can also use the slider bar or input the exact plane-normal location to use for plotting.

One of the benefits of this approach is that we can use the other cutting plane definitions to get a cross-section view, along with whatever ECAD board elements we would like to plot. For instance, if we’d like to see more clearly how the temperature varies with depth underneath active components, or around via definitions, we can easily explore this, as in the image below.

Depending on your needs, this may be sufficient flexibility for observing the temperatures of interest, and the smoothly moving cut plane with the slider-bar position is certainly an easy way to get a sense of the board’s behavior. However, SIWave only gives us access to temperature within the solid bodies of our PCB/components, and we can free ourselves from this limitation by moving into EDT Icepak. There are a couple of primary ways to do this – one is to right-click on the Icepak simulation definition in Results and “Open project in Icepak” and the other is to use the same option from the “Results” section of the top toolbar. The more manual method is to directly open the .aedt file that gets generated alongside the SIWave project file.

Much like SIWave, temperatures in EDT Icepak are primarily displayed on cut-planes or object surfaces. Three-dimensional contour plots are also available but tend to be less clear, especially on very thin bodies (like layers of a PCB). For a cut-plane, the most straightforward option is to directly draw a plane or create a new coordinate system (a coordinate system will automatically create the 3 component planes), which can both be done through the top toolbar. 

Personally, I find it easiest to quickly create the objects in the graphical window and then select them in the model tree to fine-tune their locations through the properties display, as above. I do think this is one of the places that SIWave has an edge in ease-of-use – having that slider bar definition for a plane is much nicer. Although, using this method in Icepak also lets us angle the plane however we like, so there are still trade-offs to be considered.

Once we have a plane defined, it is then very easy to select this plane in the model tree and right-click > Temperature > Temperature to create a temperature plot.

One of the immediately observable differences is that we can now view temperature contours throughout the volume of air surrounding our PCB in addition to the PCB itself. So, if we were trying to compare against something like an experimental setup with a thermocouple placed in-air near the board, this would be the way to do it!

If we’re not interested in quite so large of a plot, we can also limit it to a certain model volume by choosing one of the objects in the “In Volume” list of the plot properties. In this case, Box1 and Box2 are smaller volumes enclosing the PCB that were automatically generated for mesh controls, which we can easily reuse for trimming down our temperature plot.

To instead plot on the surface of an object, we can select that object in the model tree (for the whole PCB, it is convenient to right-click it in the tree and use the “Select All” option), follow the same Plot Fields > Temperature > Temperature as before, and then make sure to enable “Plot on surface only”.

This should produce a plot that is very similar to what we obtained in SIwave. Another advantage of doing this in Icepak should now become clear — we have the capability to stack multiple field plots! As below, we can see the solid body surface temperatures alongside our cut plane temperature down the center.

We can get as creative with this as we’d like, plotting on many different cut planes simultaneously, or even combining types of plots. Since we have access to the air volume solution, we can even do things like plot velocity vectors around the PCB for more insight into the overall system.

Having access to the full solution field (fluid and solids) means we can also visualize some other helpful values. The surface heat transfer coefficients can help us understand how to improve our setup in some cases, for instance. In the below plot, we can see some clear shadowing behind surface components which is indicative of the primary flow separating from the surface of the PCB. This certainly explains why the back end of the board is so hot – the components in the back are somewhat hidden from the flow field by those in the front. Since component (and component power) density is higher in the back, we might choose to reverse the direction of flow so that the particularly dense section of components receives the brunt of the airflow, or maybe we might explore angling the board relative to the inlet such that the entire top receives more direct flow.

While we might reach the same or similar conclusions by looking at data through SIWave’s interface, we certainly wouldn’t have access to the tools necessary to actually implement all these changes to the simulation.

As an example, I can pretty easily create a new coordinate system, rotate it by 11° from the original, and then assign my air box to the rotated reference. In effect, this angles all of PCB related volumes with respect to the flow field in just a couple of steps.

After solving, I can then compare the new temperature fields to the old and pretty quickly find that the hotspot on the top surface has been greatly reduced and that the maximum temperature of the system has dropped by about 9 °C. Not too bad! Of course, since I have modified at least one of the simulation bodies, we do have to remesh and solve from scratch, however, we already have an existing DCIR simulation to make use of, and it was much easier getting to this point having started in SIWave.

For my last set of tips, the visualization of the PCB itself in Icepak has been rudimentary so far, but we can also adjust this. Much like in SIWave, we can turn on and off the visualization of features for individual layers independently of anything else. These visualization settings are accessible by selecting our board in the 3D components list and then looking at the properties section.

Since these settings are independent of the 3D geometry visualization, we can selectively hide our model objects in order to isolate the detailed ECAD features. In my test case, the dielectric “Unnamed” layers include via definitions – so I can turn on visualization of these layers, hide the geometry for every layer except the bottom, and plot a temperature cut plane to get a nice visualization of how temperature varies around particular vias.

We could do the same for a temperature cut plane through the width/length of the board as well or even look at heat transfer coefficients on the PCB surface in regions of high via density. As is often the case with Ansys tools, the sky is the limit here.  

In summary, the SIWave interface can be both a great starting and ending point for thermal simulation depending on your needs. It makes setting up a complicated simulation very easy, albeit by removing some user flexibility, but it does allow for several methods of viewing thermal results. These include a smooth slider bar visualization for cut-plane temperatures and a dynamic mouse-probe for checking temperature values in the top-down 2D view. Since SIWave makes use of the full Icepak solver in the background, we can also access a whole lot of additional information by simply opening the existing Icepak solution in the full EDT Icepak interface after a solution has been generated. This gives us access to new thermal solution variables, variables from the fluid portion of our solutions, and new ways to plot and visualize all this information. The combination of SIWave and EDT Icepak also provides us with the opportunity to run an initial set of thermal simulations for relatively simple setups and then build on top of those with more complex boundary conditions or geometry configurations, if we either need greater detail or want to try out some more advanced cooling scenarios.

Using Ansys Icepak Results in Ansys Mechanical

With Icepak now falling under the umbrella of Electronics products in the Ansys Pro Premium Enterprise licensing scheme, it is easier than ever to obtain conjugate heat transfer simulation results without a dedicated Fluids license. Because of this, we have received multiple requests regarding methods to transfer Icepak’s results to a workbench environment for more accurate thermal and Mechanical results. So, without further ado, I will outline the procedure for four different methods along with their general use-cases.

1: Temperature from Classic Icepak

The first, and most straightforward, method is simply transferring body temperature directly from the Icepak (Classic) workbench application. This may be the preferred method for the majority of use-cases where getting thermal CHT results into a mechanical project is the goal. The Icepak node needs to be solved as normal, and then the solution can simply be dragged over to the setup node of another project, such as steady state thermal or static structural. Once this has been linked and updated, the transferred body temperatures are accessed through an “Imported Load” folder where the temperatures for individual bodies can be mapped over. The benefits are that as long as the Icepak simulation is set up as needed, you won’t need to resolve anything on the thermal side, and there is no extra manipulation of data required on the user’s end.

2: Heat Transfer Coefficients from Classic Ansys Icepak

The second method that sits natively within Workbench involves mapping heat transfer coefficients onto surfaces. This of course means that the thermal problem must be solved again, but it does provide extra accuracy over uniform HTC approximations, and some extra flexibility for recalculating body temperatures that result from changing power input conditions. This might be the desired approach if you are working with a forced flow and are looking at thermal stress results across a range of CPU loads, for example. HTC coordinate maps can be exported from Classic Icepak through the “Full Report” command with “Only summary information” disabled. 

The complicating factor for this method is that the file format and information is not compatible with Workbench for External Data mapping in its default form.

I wrote a simple python script for this purpose – it reads in the HTC coordinate data, makes it all positive, rewrites it as a CSV, and adds the necessary reference (ambient) temperature column. It is important to note here that there can be an error in reported HTC sign from Icepak. This is because the sign is determined by the direction of heat transfer, which is reported without consideration to the solid body surface normal direction. So, for entirely convex shapes, the sign will be correct, but for more complicated structures like heatsinks with surfaces facing every which way, the signs will be inconsistent. Once this is done, each column needs to be correctly associated in the external data definition and then mapped to the setup of your thermal simulation. In Mechanical, this causes an Imported Load to show up under Analysis, which you will then insert a Convection Coefficient into. This can be scoped to individual faces, which should of course be included with those chosen when exporting from Icepak.

For reference, the python script may look something like:

############################################
import numpy as np
import sys

##Usage is 'python HTCCleanup.py inputfilepath AmbientTemperature'
inputfile = sys.argv[1]
Temperature = float(sys.argv[2])

#Bring in Icepak data file as argument
data = np.loadtxt(inputfile,skiprows=25)

#Make all HTCs positive
data[:,4] = abs(data[:,4])

#Create and append a reference temperature column
temparray = np.ones([len(data[:,0]),1])*Temperature
data = np.append(data,temparray,axis=1)

#Write to file
np.savetxt('ProcessedReport.csv',data,delimiter=',',fmt='%.5e',header='Node#, x, y, z, HTC, TRef')
############################################

3: Temperatures from EDT Icepak

The electronics desktop version of Icepak is a newer and, in my opinion, a more user-friendly environment for Icepak simulations. However, since it does not integrate directly with Workbench, mapping over result data for further structural simulation is not as straightforward. Luckily for us, other users have already addressed this obstacle via an ACT extension!

This is the “Write Thermal Loads” extension that can be downloaded for free from the Ansys App Store (https://catalog.ansys.com).

Once loaded, the interface looks like this:

Basically, this is a guided wizard that will export an external data file with coordinate defined temperatures according to the EDT bodies you select with the Wizard. The wizard also generates some workbench script files that can be used to automate the import process, but the most important part to know is that the temperature data file is brought in through External Data in essentially the same way as the aforementioned HTC file. For those who are familiar with the EDT environment and want to take thermal results straight into a structural analysis, this is the preferred approach.

4: HTCs from EDT Icepak

This is perhaps the most awkward (and advanced) workflow, but it provides the same flexibility as with Classic Icepak HTCs, without the potential error in HTC sign, and with the benefit of working in the EDT environment. The portion of this flow most likely to contain errors is generating the HTC data file, as we must make use of a normally inaccessible operation in the Field Calculator. After solving an Icepak project and generating results, we should first create a face list including all of the convection faces of interest – this is done by selecting those faces in the GUI and then using the Modeler > List > Create > Face List to generate this face. Once the list is created, open the field calculator (Icepak > Fields > Calculator), and then perform the following steps:

  1. Input > Quantity > Heat Transfer Coefficient
  2. Input > Geometry > Surface > Face List
  3. Scalar > Mean > Undo (ONE TIME)
  4. Output > Write

The single undo operation grants us access to the intermediate step where HTC data is accessible as a “SclSrf: SurfaveValue(Surface,HTC)” datatype, and can also be accessed by performing undo after any other scalar operation on a scalar field definition. (such as integration over a surface or body or a min/max calculation, for example)

The .fld file produced with the write operation is close to usable in workbench, but still must be slightly reformatted and appended with a reference temperature column. I would suggest a python script that is very similar to the one used for Classic HTCs.

One thing to note is that these files generated by EDT can end up being much larger than you may expect. This is because the field calculator essentially forms a list of all the surface elements on the surfaces you have specified, decomposes them into triangular elements if necessary, and then reports the HTC value of that triangular element at each connected corner node. So, you end up with 3 times as many data entries as you have surface elements, multiple HTCs reported for each node that touches more than one surface element, and a correspondingly large file for fine meshes on complicated geometries. Still, Workbench will interpret this whole thing fairly well, and you should end up with a good HTC map to make use of in Mechanical.