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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m

pyansys-0.37.6-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.6-cp36-cp36m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m

pyansys-0.37.6-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.6-cp35-cp35m-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m

pyansys-0.37.6-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.6.tar.gz.

File metadata

  • Download URL: pyansys-0.37.6.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/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.6.tar.gz
Algorithm Hash digest
SHA256 93608fa9dcd090b6bab61a2382887f9ec85e47d8250424abbeb85b1b68c80fef
MD5 036b862ec42f6fd6cbafcd96d46759d7
BLAKE2b-256 e2580a9d69f3727e9ffe71527d5ca6eef556bd5b7585d9301dbb0ce3b40cf656

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.6-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e42218690cb840dd2ec7e19ac11717946d9efbdf73bc74c9486539d3b6a8f2f9
MD5 e0476474e998939d5bdc8bca73accfab
BLAKE2b-256 3ede03b8bda7dea922f5f9f4acfce712708f99092eaba1a9409bf257d3e4c38f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.6-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6cec7820b2b88e170a953f59ffbf4bf67cd216d3affc076761b0fe1e2bc755cb
MD5 0b00ee82a92613de398ee82b70ff5d93
BLAKE2b-256 5382e9e21f60a5c2b80612d824a9a0c396b72d7770cfbb23945795b347216dbf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.6-cp37-cp37m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 0cf1842a8d7e4f58335133d8ffad752c7dc2e5a9ae49a2bd93a49fa9c8f691a7
MD5 80dbeb8a149446124cf576347336f44b
BLAKE2b-256 f7768b8ceb623668d63c7c9f6966f33258021801e7e6f91599bd05816975a083

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.6-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d08930767fe62ff05dc3d6efa3d2706a8f150b432ba5a80ba5af611c60bf4b4f
MD5 e8e52db5d499b940c15ba3345d0e3b3e
BLAKE2b-256 2197125dc9bd126952f00e29ca0adf358b9021ac10bf1f41d7417cb41add22f4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.6-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f0fbf82cb89ad392e4fe9004861a282b2e3c4bebe3087ef8c7a687ab9bab124d
MD5 8166754ec4b7238af76298ad2e40e50b
BLAKE2b-256 a549a1de0f6246abc2a8b60c945de3b4722c547a907807696c7e7106d5b87845

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.6-cp36-cp36m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 b48cbe531ea7090bd4de9c8b5a707effc14d8ebbf230ddf5cf8bff127ef77ac6
MD5 4d6641b10ccf80f834e6bd758c8e94ba
BLAKE2b-256 2e59dc62a09a9d02a30b02fa21e5ff12c30b0bd8f744b3c149dbb55e6ae3c88a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.5.4

File hashes

Hashes for pyansys-0.37.6-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 dd87bdcf5951a249f46f92e59e0fe76b2f27b0f2716b56ed7b61951c54538080
MD5 c0422cc18baac4900eb4deaee4bcf9ac
BLAKE2b-256 b194e941b69f193ca085254af67342f70113ba0ffe5896e698783ca730c061ad

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.1

File hashes

Hashes for pyansys-0.37.6-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 be47fbbfee19418c88d42154de895dd63e7391d01f1dc5c6fddeda0c1a9df8d1
MD5 03c40201f629126f4738529771b61f3c
BLAKE2b-256 2e964fb351e5bfe11e046094b6bb53b14830c9b662ac3ba674b5edb6c45f6220

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyansys-0.37.6-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.2 CPython/3.7.2

File hashes

Hashes for pyansys-0.37.6-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 3efa0c6068f1c1eecacfad40e5771037adb002d1eb40e5862188e3590d074369
MD5 7c751767180afbabbdad8738f1a68c36
BLAKE2b-256 63544e3ea3946a067eb80edca9c89c88ca18563a4ff3b888206a50c3c3a4ecba

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