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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m

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

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m

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

Uploaded CPython 2.7mu

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

Uploaded CPython 2.7m

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0.tar.gz
Algorithm Hash digest
SHA256 6cae96a6d3a69ac88fb5157ddb80074b4542654d1cba6ef68d37bd933aec3569
MD5 7423364cd3101b7b227a401081bae3c9
BLAKE2b-256 b9237b627855d02f2bbaa03b138d3a990507d714ae494cfef93f8731fb57d557

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.35.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 ddd4c604a5380e610d48660d2ae518229fa6d4270d4937eee27c42cf898fcc7d
MD5 8f6525f748550f0174f1bbdd4da9171e
BLAKE2b-256 5a28df3a7863a53e3f066c8ab3cb1ecd823b449b68cad537deaf6edaa527dcd7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f9bc655f7295acc837d053ebb987a4903f57e5605f3b23e2b300369e51858a40
MD5 1d8edb2d196911dfc5bb07950755aa68
BLAKE2b-256 12734f15a3874a4868561fd6eecc01286520c0f8df71c318183df16b0dad1826

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.35.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 bca1454601789c6483d8a3474d27951bbc27ddd420c39bb0cbbbaa137c71b76a
MD5 17c1f53778688aef42a31dd9b680993c
BLAKE2b-256 ef6f767ee27bd95075af219c9e3442595ab8a7d6fe720732a8d47c232f9f409e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c440c331079924c48040f4ae081a31b82ef103f6aaeb1c522379964539a0233a
MD5 6c3488fd8f155bfedd50dd01e1d3c7f2
BLAKE2b-256 9edaec195b48f980711552a6ea042226d9e7b82db945ea4232cc0790e701e9a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for pyansys-0.35.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 03a462c5bcf14a19b521ceb9b2b38e1b857b7ce93ea25cc94a5abcdcde90d676
MD5 3452d7e0c5d717b05573c00d62425196
BLAKE2b-256 b9e3497904b4cfe71c4736ee8258fab83627d979929e7a1e561d580b4df345e1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 39fcd7ecf4ad1aa9dec35472bb2a0c1c11d2428b964bec3806d5fbb2834dd2d9
MD5 85fe0e91608a48823f45100f74792a2b
BLAKE2b-256 72bf0cb0aea603e910411fcfcd9fca5c543e36b5f8f39fc1c609045fbabdba76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 035222e047283c40814ef30c6a7c2ba05cc2e46482b30a9239045ac60f7d9666
MD5 32a157b0dd2abddaf36c12722f617072
BLAKE2b-256 1ded926565fccb5c87cb4948d4d81f9d05ac2a0e6f2b1f82134ea50c3cf47bc7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.35.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.31.1 CPython/3.6.3

File hashes

Hashes for pyansys-0.35.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5fb2a4538f4f24287652672fb9dc8e4c74d26dbeb8289aea5c3d663be226005c
MD5 8bd2bf41cc6657a70d6e4a7d8b69beb1
BLAKE2b-256 0a2975860a76b0a69279ad834d94bfb0fd336d3c47c8d2659236a2975a64d7d8

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