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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m

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

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m

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

Uploaded CPython 2.7mu

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

Uploaded CPython 2.7m

File details

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

File metadata

  • Download URL: pyansys-0.36.0.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.0.tar.gz
Algorithm Hash digest
SHA256 be4a32ae3837ba34dd03fdf32402d731e91bebc6ff91b5d0ace4ff6a1069ffcb
MD5 e423531d7a3dc5975f9683176d7ed6e3
BLAKE2b-256 9b0930e516102589c01dc0b35c12b6930b8711bde04d430f125923b4717ee99f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c215273ceb0f2a7afa5c07a9276be378f3939cc8714ed7a9874d8b9c743febf1
MD5 194c1e5130525fde41bb36a5f48cf57e
BLAKE2b-256 b52323a4578f5f638ee5b346f116dccfefa6e001f6fa7c75bcaf3566165d094f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1e4ada454f6081df9bdeb756b9d282d6a49543cbca560ae0887130897ac045ed
MD5 4dc06576fcbe828182decc0aa7cd6f2b
BLAKE2b-256 ef1dc8fa149fed13e696cf4d7d446a32290f67e042510cd7f343ed974e405565

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 2fad8f4d17629ebb9ff0cf6fae8dd9969f1899540948f982d3c11bbfd34e87ea
MD5 5973b6e450e36971836daccfadb1a2e4
BLAKE2b-256 315c32f967f471799dac7b8ea5ab826b5350ea60ad92ac380a3d90fd0feb934f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 66b2eb8dcdcc6edaf42bea373bd867c02ba7854108bdfcf167d07e9378366ca6
MD5 b17a864052720a0fa081460face3985d
BLAKE2b-256 a8ebe16c38b8733768bca1e1dad7100a331d96bd4b2b334d25c3ccf936e9cc64

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 f2db45f81514b9077c4180a76ad820d04fb7f093c5719bb8271bb3c6d1aed9fa
MD5 be875ca2a7f3fec5a350c2ea54466610
BLAKE2b-256 31e41594935ecea1b7bcd68fcd0158a0a39985a97e61288d0f9ee2b91d512696

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c7ff01ca76474376818f36d8e3eb6f29faef967b665b96682755705389822b48
MD5 01e736c0b2f4bdc46a8112d17a03234c
BLAKE2b-256 20c2da9d203fcec668bc38b1172df01f7c93c96262fa0321aa77afc3ad38762a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2ea22c3bcc18c394ed695571a9fd382eb26123b7f14308c3ee869d743094f509
MD5 58b0dd4eeb3f5e2ef59d2f4fab166dc9
BLAKE2b-256 0b75f9dedc1c838c5284302fe1a5e838e974c1b7a81e68ae4c1bbb63996e164d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.36.0-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.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 db8e95e3c2688502e6763ada26294d12b4df918f3aefbcd09b9ebb6cb8a399bb
MD5 e84104b8b67572b951f522174f947bae
BLAKE2b-256 81eb1b8d89ef568f96f6f9c2c92596d795c941a84244145b9e6211c66ef0cc5a

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