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 ReadArchive and then converted to a vtk object.

import pyansys
from pyansys import examples

# Sample *.cdb
filename = examples.hexarchivefile

# Read ansys archive file
archive = pyansys.ReadArchive(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.ParseVTK()
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 vtkInterface or another program that uses VTK.

# Load this from vtk
import vtkInterface
grid = vtkInterface.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.32.3.tar.gz (5.1 MB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.6m Windows x86-64

pyansys-0.32.3-cp36-cp36m-manylinux1_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.6m

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

Uploaded CPython 3.5m Windows x86-64

pyansys-0.32.3-cp35-cp35m-manylinux1_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.5m

pyansys-0.32.3-cp27-cp27mu-manylinux1_x86_64.whl (7.8 MB view details)

Uploaded CPython 2.7mu

pyansys-0.32.3-cp27-cp27m-manylinux1_x86_64.whl (7.8 MB view details)

Uploaded CPython 2.7m

File details

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

File metadata

  • Download URL: pyansys-0.32.3.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.19.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3

File hashes

Hashes for pyansys-0.32.3.tar.gz
Algorithm Hash digest
SHA256 95e6fd23f4d1cb419b8ae35faa91703f124c7e401e196c7349bee7414a1d7eb6
MD5 deabeeea0753439fe878131be2ac14a9
BLAKE2b-256 4b473d43683cc623bfe3d91a3c83dc458940ce74caec06aac5f03ba3e2bb746d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-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.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.23.1 CPython/3.6.5

File hashes

Hashes for pyansys-0.32.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 4b5e8f34e6f761feb0bb8762a90be98060e2c53a7344b2950173d3c0d921bad1
MD5 2ff3c006c7c3089351bfed0ef26214d0
BLAKE2b-256 7db9999a82e9a17937e97e18ac198f9f8676dc5b8dafa13e2a03127c2efab8c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.9 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3

File hashes

Hashes for pyansys-0.32.3-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e43d3b7d2d757155f1ee930d016a34c7889edb01e707310a2ded4cff24b79ba8
MD5 fa058c3d725083de32ba2e3a0a125e47
BLAKE2b-256 cddc838181ca5a02d209ea9115d1064dce4ac977b1f06a1192afb88452081375

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-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.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.23.1 CPython/3.6.5

File hashes

Hashes for pyansys-0.32.3-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 ca9ec7d291c1d011377594e86a9d15e24d430e677415c569b2469e36f33d54f9
MD5 242fe8de01357e794cb6689250c680e8
BLAKE2b-256 fc418832da4d0e4ca3cb78db2a891a840a733e3a771133fb4f450883d4741ba1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.8 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3

File hashes

Hashes for pyansys-0.32.3-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 02078316cda900858fb6cf75272886b36a745d6d5da69037af3ad169bc0cc7c4
MD5 a827f39c294db99dda5972e06c09f68b
BLAKE2b-256 d35d03e9cd7252169d510e79ce0b49fc26f5914dd2c7093b786c0e54b7cb84f7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.8 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3

File hashes

Hashes for pyansys-0.32.3-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 96f2d51321be7c818cc2d681d90c0ded24cc4c07f1b4d826ed184551d77bf5be
MD5 6ca00c215d5e266c4fc1a4cd8930177f
BLAKE2b-256 cda8f5e56544d67341ebe668cd86e57bcf979c38fdf873474c64007ae4b995ea

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.32.3-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 7.8 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/38.2.4 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3

File hashes

Hashes for pyansys-0.32.3-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e06d8e1d3c30a25b56373328587a9b689ddea641bc8721275d1c643cfbec1558
MD5 8eeab1187c558e40c189603ea85897fc
BLAKE2b-256 5ac95613dac568b1f2c0eb98ba487e29c351d34da7f269f29e84d33aaed53ccd

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