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.1.tar.gz (5.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyansys-0.33.1-cp37-cp37m-win_amd64.whl (5.7 MB view details)

Uploaded CPython 3.7mWindows x86-64

pyansys-0.33.1-cp37-cp37m-manylinux1_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.7m

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

Uploaded CPython 3.6mWindows x86-64

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

Uploaded CPython 3.6m

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

Uploaded CPython 3.5mWindows x86-64

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

Uploaded CPython 3.5m

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

Uploaded CPython 2.7mu

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

Uploaded CPython 2.7m

File details

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

File metadata

  • Download URL: pyansys-0.33.1.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.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1.tar.gz
Algorithm Hash digest
SHA256 9f536a0ad4d46a18b2a939f91d14385d11f2a6f3e144db9dc214a771d6076fd1
MD5 f4e79e3945fde5c8da8a046d5c738db8
BLAKE2b-256 f42ae1412224345a795364df9a788d0ae217bebcc4c3feace051e459929c04df

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 5.7 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.33.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 17cca022368851fdc69081c9ba06235034b3ac3186f678b5a1e6cd1c5a0ba2f1
MD5 a6e2a9a4dede3d5d44f9a09decb430f3
BLAKE2b-256 29b410f954717c4a64ce9187f8ec633f292df9dfe610e3a05673265b33dbb729

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.8 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1cace14b5d3b85b62ee68c853ad9dc950d8a886af8111b5b8ae89636b4efd6c8
MD5 b3f0b35bf6bb7a842fe2b6681f17d4a9
BLAKE2b-256 8562155b9add2d7e7571d01ff9790beed9a746bbf7dc6e11588f8b0f76930381

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.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.33.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 44345dc54e829fc73da31a3a83ae12e0a0c8dafe808fda7f018f4747ecbb0097
MD5 c4d6b1f552613b48c66655c1f1b2a7b0
BLAKE2b-256 0f1df64cb5da5eb4493e96a51b18bebb4305be97983c612271995a83b045619c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ecea9abcc777a5cce7f997273b9768e153ef34299d529f07c2978e92f0247f52
MD5 4d6ea4f4f84d8717159bbec41b4b55dd
BLAKE2b-256 7e936dde078078fa89ca7ae41ebfcb01aea2131da035a336f78f12fc8ab6154f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.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.33.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 236017e8343821e03bd487c71d0ac7597eec55cf3a8fc890178ccc292af5b809
MD5 8ed2f1e0c3c7af1172f1ee8f283b4cdb
BLAKE2b-256 bfe7394624baaa8ef2aea9f81bc834ef9e21ad3f9f0adb332b5a782f4619757d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 bc135aa24239097dc868578d190a790f86c953a1bb2bf70e59fecde1eadb3418
MD5 5e962835884be49042ab15b50bbeeb84
BLAKE2b-256 52cc5a5ca6f9e0c0ed9a2a32d93a8d4106598e1d060fc43b6c5b58986abe68fe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 067bd1d505d3979ff84be1d9b325cbd7e973ce60bd780772cb742e83398ff891
MD5 18b2c6327a8a25f5643532af34e2db0c
BLAKE2b-256 2a3421f6164c09060f2cd7dc04788ac3493f4d74374951a3c9e583d22f6358a6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.33.1-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.21.0 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.33.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6d1a2757caf7451dd842ad327ebc10a09c107c146a09df9a435f209ee4796560
MD5 fb4a4d6b65f191622aa352b14ea458bc
BLAKE2b-256 61a242274abe234b55380e85bc1dbbe8f070fc31754034bb1c3008186aa0fd07

See more details on using hashes here.

Supported by

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