Skip to main content

Pythonic interface to ANSYS binary files

Project description

https://img.shields.io/pypi/v/pyansys.svg https://travis-ci.org/akaszynski/pyansys.svg?branch=master http://readthedocs.org/projects/pyansys/badge/?version=latest
This Python module allows you to:
  • Interactively control an instance of ANSYS v17.0 + using Python.

  • Extract data directly from binary ANSYS v14.5+ files and to display or animate them.

  • Rapidly read in binary result (.rst), binary mass and stiffness (.full), and ASCII block archive (.cdb) files.

See the Documentation page for more details.

Installation

Installation through pip:

pip install pyansys

You can also visit GitHub to download the source.

Quick Examples

Many of the following examples are built in and can be run from the build-in examples module. For a quick demo, run:

from pyansys import examples
examples.RunAll()

Controlling ANSYS

Create an instance of ANSYS and interactively send commands to it. This is a direct interface and does not rely on writing a temporary script file. You can also generate plots using matplotlib.

import os
import pyansys

path = os.getcwd()
ansys = pyansys.ANSYS(run_location=path, interactive_plotting=True)

# create a square area using keypoints
ansys.Prep7()
ansys.K(1, 0, 0, 0)
ansys.K(2, 1, 0, 0)
ansys.K(3, 1, 1, 0)
ansys.K(4, 0, 1, 0)
ansys.L(1, 2)
ansys.L(2, 3)
ansys.L(3, 4)
ansys.L(4, 1)
ansys.Al(1, 2, 3, 4)
ansys.Aplot()
ansys.Save()
ansys.Exit()
https://github.com/akaszynski/pyansys/raw/master/doc/images/aplot.png

Loading and Plotting an ANSYS Archive File

ANSYS archive files containing solid elements (both legacy and current), can be loaded using Archive and then converted to a vtk object.

import pyansys
from pyansys import examples

# Sample *.cdb
filename = examples.hexarchivefile

# Read ansys archive file
archive = pyansys.Archive(filename)

# Print raw data from cdb
for key in archive.raw:
   print("%s : %s" % (key, archive.raw[key]))

# Create a vtk unstructured grid from the raw data and plot it
grid = archive.parse_vtk()
grid.plot()

# write this as a vtk xml file
grid.Write('hex.vtu')
https://github.com/akaszynski/pyansys/raw/master/doc/images/hexbeam.png

You can then load this vtk file using vtki or another program that uses VTK.

# Load this from vtk
import vtki
grid = vtki.UnstructuredGrid('hex.vtu')
grid.plot()

Loading the Result File

This example reads in binary results from a modal analysis of a beam from ANSYS. This section of code does not rely on VTK and can be used with only numpy installed.

# Load the reader from pyansys
import pyansys
from pyansys import examples

# Sample result file
rstfile = examples.rstfile

# Create result object by loading the result file
result = pyansys.ResultReader(rstfile)

# Beam natural frequencies
freqs = result.GetTimeValues()
>>> print(freq)
[ 7366.49503969  7366.49503969 11504.89523664 17285.70459456
  17285.70459457 20137.19299035]

# Get the 1st bending mode shape.  Results are ordered based on the sorted
# node numbering.  Note that results are zero indexed
nnum, disp = result.NodalSolution(0)
>>> print(disp)
[[ 2.89623914e+01 -2.82480489e+01 -3.09226692e-01]
 [ 2.89489249e+01 -2.82342416e+01  2.47536161e+01]
 [ 2.89177130e+01 -2.82745126e+01  6.05151053e+00]
 [ 2.88715048e+01 -2.82764960e+01  1.22913304e+01]
 [ 2.89221536e+01 -2.82479511e+01  1.84965333e+01]
 [ 2.89623914e+01 -2.82480489e+01  3.09226692e-01]
 ...

Plotting Nodal Results

As the geometry of the model is contained within the result file, you can plot the result without having to load any additional geometry. Below, displacement for the first mode of the modal analysis beam is plotted using VTK.

# Plot the displacement of Mode 0 in the x direction
result.PlotNodalSolution(0, 'x', label='Displacement')
https://github.com/akaszynski/pyansys/raw/master/doc/images/hexbeam_disp.png

Results can be plotted non-interactively and screenshots saved by setting up the camera and saving the result. This can help with the visualization and post-processing of a batch result.

First, get the camera position from an interactive plot:

>>> cpos = result.PlotNodalSolution(0)
>>> print(cpos)
[(5.2722879880979345, 4.308737919176047, 10.467694436036483),
 (0.5, 0.5, 2.5),
 (-0.2565529433509593, 0.9227952809887077, -0.28745339908049733)]

Then generate the plot:

result.PlotNodalSolution(0, 'x', label='Displacement', cpos=cpos,
                         screenshot='hexbeam_disp.png',
                         window_size=[800, 600], interactive=False)

Stress can be plotted as well using the below code. The nodal stress is computed in the same manner that ANSYS uses by to determine the stress at each node by averaging the stress evaluated at that node for all attached elements. For now, only component stresses can be displayed.

# Display node averaged stress in x direction for result 6
result.PlotNodalStress(5, 'Sx')
https://github.com/akaszynski/pyansys/raw/master/doc/images/beam_stress.png

Nodal stress can also be generated non-interactively with:

result.PlotNodalStress(5, 'Sx', cpos=cpos, screenshot=beam_stress.png,
                       window_size=[800, 600], interactive=False)

Animating a Modal Solution

Mode shapes from a modal analsyis can be animated using AnimateNodalSolution:

result.AnimateNodalSolution(0)

If you wish to save the animation to a file, specify the movie_filename and animate it with:

result.AnimateNodalSolution(0, movie_filename='/tmp/movie.mp4', cpos=cpos)
https://github.com/akaszynski/pyansys/raw/master/doc/images/beam_mode_shape.gif

Reading a Full File

This example reads in the mass and stiffness matrices associated with the above example.

# Load the reader from pyansys
import pyansys
from scipy import sparse

# load the full file
fobj = pyansys.FullReader('file.full')
dofref, k, m = fobj.LoadKM()  # returns upper triangle only

# make k, m full, symmetric matricies
k += sparse.triu(k, 1).T
m += sparse.triu(m, 1).T

If you have scipy installed, you can solve the eigensystem for its natural frequencies and mode shapes.

from scipy.sparse import linalg

# condition the k matrix
# to avoid getting the "Factor is exactly singular" error
k += sparse.diags(np.random.random(k.shape[0])/1E20, shape=k.shape)

# Solve
w, v = linalg.eigsh(k, k=20, M=m, sigma=10000)
# System natural frequencies
f = (np.real(w))**0.5/(2*np.pi)

print('First four natural frequencies')
for i in range(4):
    print '{:.3f} Hz'.format(f[i])
First four natural frequencies
1283.200 Hz
1283.200 Hz
5781.975 Hz
6919.399 Hz

License and Acknowledgments

pyansys is licensed under the MIT license.

ANSYS documentation and functions build from html provided by Sharcnet. Thanks!

This module, pyansys makes no commercial claim over ANSYS whatsoever. This tool extends the functionality of ANSYS by adding a python interface in both file interface as well as interactive scripting without changing the core behavior or license of the original software. The use of the interactive APDL control of pyansys requires a legally licensed local copy of ANSYS.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyansys-0.33.0.tar.gz (5.1 MB view details)

Uploaded Source

Built Distributions

pyansys-0.33.0-cp36-cp36m-win_amd64.whl (5.7 MB view details)

Uploaded CPython 3.6m Windows x86-64

pyansys-0.33.0-cp36-cp36m-manylinux1_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.6m

pyansys-0.33.0-cp35-cp35m-win_amd64.whl (5.7 MB view details)

Uploaded CPython 3.5m Windows x86-64

pyansys-0.33.0-cp35-cp35m-manylinux1_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.5m

pyansys-0.33.0-cp27-cp27mu-manylinux1_x86_64.whl (7.7 MB view details)

Uploaded CPython 2.7mu

pyansys-0.33.0-cp27-cp27m-manylinux1_x86_64.whl (7.7 MB view details)

Uploaded CPython 2.7m

File details

Details for the file pyansys-0.33.0.tar.gz.

File metadata

  • Download URL: pyansys-0.33.0.tar.gz
  • Upload date:
  • Size: 5.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.0.tar.gz
Algorithm Hash digest
SHA256 bc75e7c271bb374388cc10e992f83122c869a6d80778317e4ed9607c08bda1c0
MD5 4b2560c3c3eaefa204670aa89799e640
BLAKE2b-256 2b50e0e5f52f12326b6c8a971d880637f0112fab8beb6df81300bff46d02e6ea

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.23.1 CPython/3.6.7

File hashes

Hashes for pyansys-0.33.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d72c66e329d001c6d7b68fcd5b2505ac652b1081bf81df83792b4fb431608fa2
MD5 d56ca60e42e2978d061ee722ea321135
BLAKE2b-256 f19dba1106b70826cca2b176c4fbf280dccd213be2437a7d42badaa5c054e6b9

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.8 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7a0824b6149c089acddb9f6ee1d0bbe533d182cd955248b3a12fe4997a22cc2b
MD5 ead8375c86c97de32d1344adaecdbc3c
BLAKE2b-256 6b221f27ccf6c4393ad8c575be80c1b5099dad08e96fe82ac6f0d4d23e938d60

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.23.1 CPython/3.6.7

File hashes

Hashes for pyansys-0.33.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 cea1fed81d182ff550f0c0fbc77f99a69ec02e648514a0e4b12b928fa0b38f3a
MD5 89bf4b091265c77903873523f51b58dd
BLAKE2b-256 ceb142db94eb3b7f261551c7c90589520bfc4b5b6caaa1c49f70476cb587f68d

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d402dffbed4d9d1ab3b6ff95caed01b1008daa5a4e3419a19dc123aa72ae55f0
MD5 c9d3931cf4cbc9a1f8bb712cbe6c2261
BLAKE2b-256 8a1b14555f81bc46b41cfa6cde0e21d2522ca64cc6b8fac990883a7eb4c5a733

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 149a474e2e43d99df372c1549ebfffb48d5ca4ac26659cbc450fd7163ed2dec2
MD5 ed0f1c53eae404a7ec7016e7110ca39e
BLAKE2b-256 40d54b100934f9dd6c792bcb4e2af81685066342297ebe9c4161ecbf4ad20c5b

See more details on using hashes here.

File details

Details for the file pyansys-0.33.0-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.33.0-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 46b7663181cb08bfabe5faf91a95ff888c4ea5f95269462eb7cacc278331ac4b
MD5 14957a507876fccf2240a045944beead
BLAKE2b-256 589a55bd2851d1f7484d901157a48828ad4a20e11909ab8474dfb31d5272bba9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page