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.read_binary(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.37.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

pyansys-0.37.0-cp37-cp37m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.7m Windows x86-64

pyansys-0.37.0-cp37-cp37m-manylinux1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.7m

pyansys-0.37.0-cp37-cp37m-macosx_10_6_intel.whl (2.8 MB view details)

Uploaded CPython 3.7m macOS 10.6+ Intel (x86-64, i386)

pyansys-0.37.0-cp36-cp36m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.6m Windows x86-64

pyansys-0.37.0-cp36-cp36m-manylinux1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.6m

pyansys-0.37.0-cp36-cp36m-macosx_10_6_intel.whl (2.8 MB view details)

Uploaded CPython 3.6m macOS 10.6+ Intel (x86-64, i386)

pyansys-0.37.0-cp35-cp35m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.5m Windows x86-64

pyansys-0.37.0-cp35-cp35m-manylinux1_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.5m

pyansys-0.37.0-cp35-cp35m-macosx_10_6_intel.whl (2.8 MB view details)

Uploaded CPython 3.5m macOS 10.6+ Intel (x86-64, i386)

File details

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

File metadata

  • Download URL: pyansys-0.37.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.0.tar.gz
Algorithm Hash digest
SHA256 5267aa385b4d4bd40e5b86732d84af3b624f43c0bce4b5330374c213f02f67f6
MD5 ec76d7274fcca7cb4a5a6d9b8465819b
BLAKE2b-256 309f823d9acbbee94e73a8f0c76fecf04d456eb1101435c68f6ef329f1f138a9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 bd49fb6813cef8105481907390d81d04bee8337045fc09035ba7db4dd2456ea6
MD5 8eb2becac31ac1e36ea93341b32c6bec
BLAKE2b-256 fb05fa3525182dcb8a50cff72df7d554733857498782de15416cf805184b6b35

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.3 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ce41cdfab10ea72f7f5d6e1233255b4daba1fbe551548fcc2ca295940f3e72ef
MD5 b17d7cba7befdaa18967527784b232cc
BLAKE2b-256 4eeaefcf5326f0f05ffe3d0e33aa3f04da23221819f3f81660955572e114f6b9

See more details on using hashes here.

File details

Details for the file pyansys-0.37.0-cp37-cp37m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyansys-0.37.0-cp37-cp37m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.7m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.0-cp37-cp37m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 1a727da9ed499e3dfec4ce631a9ba36700efa3fce7ad87932719a68e0ee0a36d
MD5 c142b0cd9617ca5a6bcdcc7b4ab211e8
BLAKE2b-256 5977e225f689ad8671382856482684b48f8c68f9e46d4e2715350919f0d05131

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 e80778a7d616f359e0fdccaf9542e1d495c1d8aeffe6be2992d9181571216f39
MD5 6160f94ab55081ddc211626b5cc68b5b
BLAKE2b-256 c96ba484d4811dff20e2fe791f105ff5016843d552c3dd5059f9c6f373463f2c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.3 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 02e0a89c8c58d54587d219a50b856e25c54d1ca3ebbdb3547c8d6a2e8060056a
MD5 6cb950f56cc707c4a9fb482c94852538
BLAKE2b-256 075bd6660673ddc202da4638abd552e56765c201f55384cee08d7afb7331982b

See more details on using hashes here.

File details

Details for the file pyansys-0.37.0-cp36-cp36m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyansys-0.37.0-cp36-cp36m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.6m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.0-cp36-cp36m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 61151dcfca13a35699cd1efeab5be84b08f5c7b6368daa42510f3493a1cb3de9
MD5 334734aacf4d7401347a5cf02992bca7
BLAKE2b-256 4402c04413f61b0db7c1302aa01a606ce6fa8725e8d1fcb8726924a0bd3e27c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 db1ba1fa2d7c61550371a15280c45d2c6a21f5e7c9dcdd4e224f5c91dd0696da
MD5 fead80ddfc75ba2ac748b6cd7f5c35b4
BLAKE2b-256 1e3a79c69eefc977631c6865126d81d6e2a2d67876727fc08bd8e777fe9399fd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.0-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 4.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 45095b6b1d804628722b9a5118def240a3bd79cbe0d4b203e62735277927a4b3
MD5 25bf11e98193c291af39b5680f250323
BLAKE2b-256 8272dd57900cf10cf6455c656fb306b306bfe340193c25cdda94a23288660a34

See more details on using hashes here.

File details

Details for the file pyansys-0.37.0-cp35-cp35m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyansys-0.37.0-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.5m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.0-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 6a6bbc23790fa18fdfa7a0726ac9a163b264e094a7b987b30fc48e71accbc7fc
MD5 02f549e918100d683276317767308b7b
BLAKE2b-256 5273ee60b76236e3f8d82c93fe9ef36c2ddc953d69dddeb52b4f8133aef9552e

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