Skip to main content


Showing posts from 2018

CMS Superelement Harmonic Analysis

Fig 1: Project Schematic
With the release of Mechanical 19.2, substructuring is now available for Modal & Rigid Dynamics without scripting. That just made my earlier post on CMS outdated! Note that there is still a key limitation where Generation and Expansion Pass must be performed on your local machine.

To get ahead of the game a bit, here is a way to do Harmonic Analysis extending on previous work. (Please go through that before this post). Some points of note:
The method of merging the CMS and non-CMS models together into System C is the same.All files related to the superelement has to be copied over to the solver file directory as before.Modal analysis need not be performed first as the example here uses Full Method instead of Modal Superposition for simplicity. The script expands the responses the same way as Modal Analysis does so the script will look familiar.Additional Resources:
Example: Harmonic Response to Unbalanced Force using CMS (Link)
Example: Modal and Harmonic …

Learning Python for Ansys and Beyond

Figure 1: Colab by Google
Ansys has ACT extension where users can do some customization using a popular programming language called Python. The barriers to learning Python is now much lower but I'm still stumped by Object Oriented Programming. Hopefully this post would be useful to those who fit the following demographics:
Knows simple programming concepts like loops and functionsUnderstand some Calculus
Side Notes on Ansys ACT Before You Begin
Ansys uses IronPython 2.7 which is an implementation in the .NET framework. Unfortunately, as I understand it, some libraries such as NumPy are difficult to install.

Colaboratory Research by Google (Fig 1) is a neat tool. All you need is a free Google account and you can execute Python scripts on the browser. No installation required! It has Jupyter notebook running in the background and allows both Python 2 or Python 3. While NumPy and Matplotlib is already installed by default, you could install other libraries using !pip install. All…

Modal Submodeling

This post was inspired by CAEAI's blog post on modal analysis sub-modeling and an XANSYS question. Their instructions were not explicit and everything was done in Ansys Classic. The goal here is to show modal submodeling in Ansys Workbench. Here's a walk through of an example:

Step 1
Solve the coarse model Modal Analysis (System A).
Fig 1: Coarse Model Modal Analysis (System A)
Step 2
Create a finely meshed submodel Harmonic Response Model (System B). This will be the submodel.
Fig 2: Project Schematic
After creating the desired mesh, add a named selection at the cut boundaries called cut_face. Add the following command snippet in the Setup branch.

!! Creates cut boundary NODE file
! WB will complain but boundarynodes.node file should be created
cmsel, s, cut_face
nwrite, boundarynodes, node

The above step writes out a file listing the nodes and their coordinates which will be used for interpolation. After solving for the model, Ansys Workbench will flash a lot of e…

Ansys Student in the Cloud

Cloud Computing*?
Cloud computing is all the rage now for good reason. It is tempting to own a low cost computer and remote-desktop to a supercomputer. One could, in theory, run Ansys on Chromebook with internet connection by connecting to a Cloud Computing Providers Virtual Machine. I took a quick look and have the following to report.

Setting Up Windows Virtual Machine (VM) : Quick Start
Google Compute: YouTube 
Micosoft Azure: YouTube1 & YouTube2

Patience is key. After starting up the Virtual Machine for the first time, one has to wait a bit (15 minutes?) before the virtual machine really starts for one to remote login. I fiddled around with the "source IP ranges", setting it to and even my own IP address. It was unclear if that was useful or waiting alone did the trick.

Once logged in, one has to override the strict security set by the Internet Explorer to allow download of the free Ansys Student.

Finally, remember to Shut Down from the remote desktop and &quo…

Non-linear Convergence

Saying a Prayer*
In the few tingling seconds between saving the project and hitting Solve on Ansys, I would mutter a prayer under my breath. There is always an indescribable brief sense of helplessness and hope. Non-linear problems are tough because... they are nonlinear! A small nudge can have disproportional effects. 
Learning how to solve non-linear problems takes patience and luck. Here are some resources which I found useful in my journey in learning the secret arts (in no particular order): 1. CAEAI: Best Practices (link) 2. Joseph Metrisin: contact convergence debugging guidelines (link)  3. Rod Scholl: contact analysis guidelines (link) 4. Ansys: Could you give me tips and tricks for Non-linear simulations? (link) 5. John Higgins: Obtaining and Optimizing Structural Analysis Convergence (link) 6. PADT: Overcoming Convergence Difficulties (Part I & II) 7. Ansys: Snap Fit Analysis - Best Practice (link) 8. Charlie Wells: Xansys words-of-wisdom (link)
It is no doubt worth re…

ACT to Automate Post-Processing

I gushed about the ACT console in a previous post. Here's another example of automatically populating some post processing objects for all time steps inside Mechanical after a solve. Copy-and-paste it in Mechanical ACT Console Command Line, then hit the Enter key.

Text file of script: Link.

# Extracts at each time step... # x, y, z stress components, von Mises stress, max principal stress, total deformation, and x, y, z normal deformation components numsteps = ExtAPI.DataModel.Project.Model.Analyses[0].AnalysisSettings.NumberOfSteps for ct in range(numsteps): setTime = str(ct+1) + " [s]" nowTime = str(ct+1) + "s" # Normal Stresses sx=ExtAPI.DataModel.Project.Model.Analyses[0].Solution.AddNormalStress() sx.NormalOrientation =NormalOrientationType.XAxis sx.DisplayTime=Quantity(setTime) sx.Name = "Normal Stress X at "+nowTime sy=ExtAPI.DataModel.Project.Model.Analyses[0].Solution.AddNormalStress() sy.NormalOrientation =Norma…

Cleaning Up Geometry with SpaceClaim

I sometimes come across a very ugly UGLY message when I try to mesh. The description is especially misleading.

Figure 1: Error! 
The problem is often fixable in SpaceClaim. Here's something to try:
1. Select everything (Ctrl-A), Right-Mouse-Button then Detach All.
2. Under the Repair tab, click on Stitch and click the green check mark to complete all.

Hopefully the first step would solve all problems. You could verify this using the Check Geometry feature. It's not full proof but worth a shot.

Figure 2: Check Geometry
This would highlight any outstanding problem areas. Other repair tools such as repairing gaps and missing faces usually does the job. Otherwise, it may be necessary to get more fancy by removing the difficult surface by cutting it (Ctrl-X), then replacing it with blending or fill
A really neat trick with fill is Patch Fill. First click on Fill without selecting any geometry. Under the options, the default is Extend Fill. If any geometry was previously selected,…

Tension Only LINK180

Figure 1: Von Mises Stress Animation
LINK180 is a very interesting element which allows tension but not compression. A snippet in a Beam element does the trick of configuring beams in Workbench into tension only beams.

et, matid, 180
*get, area, secp, matid, prop, area
sectype, matid, link
secdata, area
seccontrol,, 1 ! Tension only

The example problem has a thin plate that has a Revolute joint in the middle that rotates \(\pm3^o\). The two chain LINK180 on each sides of the plate will thus take turns being in tension and be relaxed.

Figure 2: Displacement Animation
The forces plotted using SMISC1 shows forces in tension.

Figure 3: Force Animation
V18.2 Archived Workbench File: Link

APDL Pseudoinverse Least Square Fit

Curve fitting is a frequently used tool in engineering. I wished my linear algebra teacher taught me pseudoinverse. As used in the previous blog post script, it computes the least-square curve fit for linear equations. This can come in handy for fitting 2D or even 9D variables.

For a simple 2D straight line, the equation is \( y = m \cdot x + c\). Writing it matrix form, we have:

\(y = \begin{bmatrix} x & 1 \end{bmatrix} \cdot \begin{bmatrix} m\\c \end{bmatrix}\)
With multiple data points in space (e.g. \((x_1,y_1), (x_2,y_2),\dots\) ) the equation looks like this...

\( \begin{bmatrix}y_1\\y_2 \\y_3\\ \vdots \end{bmatrix} = \begin{bmatrix} x_1 & 1\\ x_2 & 1 \\ x_3 & 1 \\ \vdots & \vdots \end{bmatrix} \cdot \begin{bmatrix} m\\c \end{bmatrix} \)
This matrix looks similar to \(y = A \cdot b\) where our

\(A = \begin{bmatrix} x_1 & 1 \\ x_2 & 1 \\ x_3 & 1 \\ \vdots & \vdots \end{bmatrix} \) and \(b = \begin{bmatrix} m\\c \end{bmatrix} \)
If \(A\) is a sq…

Extract Translation & Large Rotation

Figure 1: Z-X'-Y'' Rotation of the 'Grip'
PADT has a recent post on Extracting Relative Displacements in ANSYS Mechanical. The macro only works for small angles (in the order of 5 degrees). The accompanied PDF file shows:
\(u = dR \cdot (x-\overline{x}) + \overline{u}\)
Their nomenclature:
   \(dR\) : Small rotation matrix
   \(x\) : Nodal position vector
   \(\overline{x}\) : Center of Gravity (CG) position vector
   \(u\) : Nodal displacement vector
   \(\overline{u}\) : CG displacement vector

To extend their work to account for large deflection, I've added some terms:
\(x + u - \overline{x} \approx R \cdot (x - \overline{x}) + \overline{u} \)    \(R\) : Rotation Matrix

The left side of the equation is the final deformed body. The right side of the equation is the rigid body rotation and translation. As the rotation is applied at the center of the body, \(\overline{x}\) is accounted for on both sides of the equation.

Note that 'equal' is just an appr…

Reuse CMS Superelement in Ansys Workbench with Expansion

Figure 1: CMS Reuse Project Schematic
In the previous two posts (here and here), the workflow requires another generation pass when reusing the model. This diminishes the advantage of using a component mode synthesis (CMS) superelement model. The difficulty is that when the model changes, the superelement node numbering no longer matches the new workbench (WB) model. Everything gets shuffled around.

To reuse a superelement body, we need the  nodes to persist in the final Analysis for expansion.

We start out with an original modal analysis (Analysis A) that would have worked on it's own. Next, the original modal analysis is duplicated (becoming Analysis B). Analysis A will be modified to only have the superelement body while Analysis B will be modified to have the geometry and mesh of non-superelement body. When both analysis are assembled into a new modal Analysis C, Analysis B's element and nodes are automatically offset so that the ordering is correct. The trick is …

Component Mode Synthesis (CMS) with Results Expansion in Ansys Workbench

Figure 1: Results from Full Model (Left) and CMS (Right)
In a previous post on Component Mode Synthesis (CMS) in Ansys Workbench, the expansion of the results were omitted. This is remedied in this post. Figure 1 compares the results favorably between the full model to a model with the mid-section as a CMS part.

1. The archived workbench file (R18) can be downloaded here (download icon at top-right).
2. Script that is used as solution snippet can be downloaded here.
3. A key resource is available in the help documentation.
4. Some fancy graphics describing the process here.

General Setup
Figure 2: Overall Geometry (Left) & CMS Part (Right)
This example has a few prerequisites:
1. Multi-parts with shared topology (Figure 2)
2. Named Selection of the CMS part (Body1 in example)
3. Named Selection of interface on CMS part (c1a & c2a in example)
4. Command snippet under solution does everything. Between steps, no suppressing and un-suppressing part nonsense requ…

Slice-and-Dice Mesh Selected Body

When meshing challenging bodies, it is sometimes useful to slide-and-dice bodies in SpaceClaim via Split Body and Share Topology to isolate the trouble spots for tighter controls. In Mechanical, the bodies could be individually meshed in the 'right' sequence such that key features are respected.

Figure 1: Generate Mesh on Selected Bodies
This is done by first selecting the Mesh object in the Outline. Right-mouse-button on the body, then Generate Mesh on Selected Bodies. This was done twice to generate bodies shown in Figure 2. 
Figure 2: Individually Meshed Bodies

U* Index for Load Path Analysis

An XANSYS forum poster pointed out an interesting thesis on load path index U*. There was a brute force method of a solution for every single node shown in Figure 8. Alternately, there is a U* Toolkit found in Nastran which appears to really speed the calculations.

The brute force method was used here in this Ansys Classic input file : link

Figure 1: Load Path Index U*

Torsional Spring in ANSYS Workbench

Torsional springs can come in handy when inertia plays a large role in the dynamic response. Fortunately a simple snippet converts a typical linear spring into a torsional spring. Workbench uses COMBIN14 springs by default.

keyopt, _sid, 3, 1   ! rotational DOF about spring axis
r, _sid, 0.01        ! rotational stiffness

Torsional Mode due to Torsional Spring
One could also specify the radial stiffness of the spring above by specifying the direction. Note that KEYOPT(2)=1.
keyopt, _sid, 2, 1! UX direction about global axis
r, _sid, 1e5            ! Translation stiffness

Same goes for off-axis rotational DOF via KEYOPT(2)=4.
keyopt, _sid, 2, 4! ROTX direction about global axis
r, _sid, 1e5            ! Rotation stiffness

The Workbench (v18.2) Archived File: LINK

Adhesive CZM ANSYS Parameters

How to Extract CZM Parameters From Test Data?
A few years ago, I was pulled in to do some adhesive modeling. The project leaders later decided against using adhesives but it peaked my interest on how to simulate adhesives using Cohesive Zone Modeling (CZM). Mode I Peel direction failure was a concern and glue manufacturers sometimes lists the peel strength per ASTM D 1876. Unfortunately, from those values alone, it is difficult to determine the needed parameters for use in ANSYS.

1. CAEAI presentation [link] provides good background information
2. PADT The Focus #56 by Rod Scholl [link] explained the parameters clearly
3. Paper by A. Khayer Dastjerdi & E. Tan & F. Barthelat [link] referenced in this blog
4. Ansys Knowledge Resource #2052789 [link] model with bonded contacts

Simulation Model Goal
Unlike ASTM D1876, the paper by Dastjerdi et al provides a clear way of translating load frame test data into parameters used in ANSYS. ASTM's flimsy panels that are highly…