One of our customers had been curious about simulating case hardening in SOLIDWORKS Simulation. Since this is a unique application for Simulation, I wanted to share the different ways we discovered to tackle this application.

The Challenge: Adequately Refining the Mesh in the Case Depth

The biggest challenge: the ability to adequately refine the mesh in the case depth. To get around this challenge, there were two options:

  1. The first and most ideal situation is if your part happens to be axi-symmetric or has a constant cross-section, then you can use 2D Simplification analysis to greatly reduce the problem size.  
  2. If your part cannot use 2D simplification, the next option is to create an offset surface of your case-hardened component and define that surface like a shell element with its thickness equal to the case depth. You can make this analysis as complex or simple as you would like depending on the data you have available.

Let's take a look at a simple example (see image below). In this case, I was able to use 2D Simplification since the part is axi-symmetric. The first thing I did was split the main part into multiple bodies, because when case-hardening the part you are changing the material properties on the outside of the component.

For us to apply different material properties to the case-hardened portion, we need to have multiple bodies for which to apply the material properties. You can use whatever modeling techniques you'd like to create the case-hardened bodies. To cut the part into multiple bodies, I simply took the final part and offset the outside surface and then used the "Split" feature.The number of bodies you create will depend on how accurate you want your case-hardened simulation, as well as how much material data you want to have available to you.

If you are familiar with case hardening, you know the hardest material is at the surface. It then gradually transitions back to the main part material properties as you increase the depth into the part. If you have multiple measurements taken through the case depth, you can split the part up into multiple bodies; each layer representing a different measurement and subsequently a different material property associated with that layer.

For my example, I just did two layers, one at 5 thousandths and another at 15 thousandths...

Case Hardening Using SOLIDWORKS Simulation

Once the bodies split, it's just a matter of setting up your analysis as you normally would. The only difference is that a different material is applied to each layer of your case depth. If you want to simulate this part all the way to failure, you will need to perform this analysis in a Non Linear study. That is because, generally speaking, the material property that changes the most with case hardening is the ultimate strength. You'll also want to make sure you have a stress-strain curve that you can reference since after yield the material behavior is not linear.

Material Properties Settings in SOLIDWORKS Simulation

If your part is not axi-symmetric or a constant cross-section, you can still run this problem efficiently by using shell elements for each layer into the case depth. Just remember to define the thickness of the shell to be the thickness of that layer and then apply the material as we did previously.

Bonus Tip

If you want to take this a step further and get a more accurate analysis, you can link your material properties to a temperature dependent curve. Then, if you have Simulation Professional, you can use a thermal analysis to define the corresponding temperature at each case layer and let the software linearly interpolate the values between the layers.This allows you get transition material properties from one layer to another rather than defining the layer as a constant material property.

When using this process, you need to make sure the materials you've created have a thermal expansion coefficient that is nearly zero because the software does not allow you to have a zero thermal expansion when referencing a Thermal study. I usually use 1e-15, this is the smallest value you can input without it rounding to zero.