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 v14.5 + using Python on Linux, >=17.0 on Windows.

  • 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.run_all()

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/docs/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/docs/images/hexbeam.png

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

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

Loading the Result File

This example reads in binary results from a modal analysis of a beam from ANSYS.

# 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.open_result(rstfile)

# Beam natural frequencies
freqs = result.time_values
>>> 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.nodal_solution(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.plot_nodal_solution(0, 'x', label='Displacement')
https://github.com/akaszynski/pyansys/raw/master/docs/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.plot_nodal_solution(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.plot_nodal_solution(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.plot_nodal_stress(5, 'Sx')
https://github.com/akaszynski/pyansys/raw/master/docs/images/beam_stress.png

Nodal stress can also be generated non-interactively with:

result.plot_nodal_stress(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 animate_nodal_solution:

result.animate_nodal_solution(0)

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

result.animate_nodal_solution(0, movie_filename='/tmp/movie.mp4', cpos=cpos)
https://github.com/akaszynski/pyansys/raw/master/docs/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.load_km()  # 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.36.1.tar.gz (8.1 MB view details)

Uploaded Source

Built Distributions

pyansys-0.36.1-cp37-cp37m-win_amd64.whl (8.8 MB view details)

Uploaded CPython 3.7m Windows x86-64

pyansys-0.36.1-cp37-cp37m-manylinux1_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.7m

pyansys-0.36.1-cp36-cp36m-win_amd64.whl (8.8 MB view details)

Uploaded CPython 3.6m Windows x86-64

pyansys-0.36.1-cp36-cp36m-manylinux1_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.6m

pyansys-0.36.1-cp35-cp35m-win_amd64.whl (8.7 MB view details)

Uploaded CPython 3.5m Windows x86-64

pyansys-0.36.1-cp35-cp35m-manylinux1_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.5m

pyansys-0.36.1-cp27-cp27mu-manylinux1_x86_64.whl (10.8 MB view details)

Uploaded CPython 2.7mu

pyansys-0.36.1-cp27-cp27m-manylinux1_x86_64.whl (10.8 MB view details)

Uploaded CPython 2.7m

File details

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

File metadata

  • Download URL: pyansys-0.36.1.tar.gz
  • Upload date:
  • Size: 8.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1.tar.gz
Algorithm Hash digest
SHA256 d0ca0eb949f5a36a67ee68f631eb7e7558d8d04fa16dc1febd21b8b9c016043e
MD5 e536362a08b0c7b778373bd74dcc6a49
BLAKE2b-256 d5be65ebdaa2707ba6350f2733e801ac4380e238281f34bf7607c5bf95501d11

See more details on using hashes here.

File details

Details for the file pyansys-0.36.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pyansys-0.36.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for pyansys-0.36.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 bea2c7c2e1c82c566b397373fe258541817b8220319083313d42f0d9e3d05138
MD5 60e0ebe03a86d210cece22190a97668c
BLAKE2b-256 c9068638b75c7a242297fb0ce1cf2d1ba5d247aa94cb0e0a8c021ecdafbb6773

See more details on using hashes here.

File details

Details for the file pyansys-0.36.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyansys-0.36.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 11.0 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3acbe182a5be9d51e779c1c5f28d7c543dcb41efb257471aae0cc3180b896693
MD5 cec49adb8105d4237109292ff933bc6a
BLAKE2b-256 6d35b3b18fd01cb75dd835f68884a0e15bdb8fd16780aeced6fb7834b4fa97ab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for pyansys-0.36.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 8bf86f6c759aa5ce6d0c800163d546fcf109ebdca530f6307c2fefe8b7252ddc
MD5 1aea3c31b79849498592f803d64d75f6
BLAKE2b-256 3f95179d154d60d845f3cc03898d9c1fe260b2801bfca6940b8be0cfbd3a7cfe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 11.0 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4aef4b1b14bd0c3c0bfc383e37d98b007626c3b30f782c9e1a17fdaebc2c1afc
MD5 4322f224a1167bd4e371f06fe3e4b262
BLAKE2b-256 b0da514fd9523121dce894acb8e1f92fcf5c7389d4d3016026989cef514e03d2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 8.7 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for pyansys-0.36.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 7055b71617dc302bab6f23315f7ed4525cab271ed5b3c683a77851c377afccea
MD5 53badf511914897fda18f55bdfe1a3a9
BLAKE2b-256 f6cdcbe5cbeeeecc202226ee0d5556875faf5ccba080ab0034b175bf421e61d3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 10.9 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 86a3420711a53fff65c69428fb6a52363bdcfb9fe216d2343ca56cb75a736152
MD5 dc7f48510598b00d22a9f977dab4d60c
BLAKE2b-256 0445c0332a1897f5ee62e148c0466bf5edaaef21da9f91639f174492ec363011

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 10.8 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1028d02cd9eced771921f1a78dc8146370722e0bc241f17acbef917d1d592bd9
MD5 df2ec88a529e402e89735a241c4375b6
BLAKE2b-256 1d2115289b40d0e0b583ef8b98d654877649aa30646cedffd069f53cc6da5309

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.1-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 10.8 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.36.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 aecb09f98436ada1f32b51a24e88f25dde44195b1a2e38bfdaf2daecf250ff09
MD5 08277cba01ab466406c0401033ec4dca
BLAKE2b-256 f01dd721654717d049b09b421cf504059ebcd1cdd587ea9fd73255836d62c507

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