Skip to main content

Python interface to LS-DYNA Service

Project description

PyDYNA

PyAnsys Python PyPI GH-CI Codecov MIT Black

Overview

PyDYNA is a Pythonic package for providing a more convenient and complete way to build an Ansys DYNA input deck, submit it to the Ansys LS-DYNA solver, and finally postprocess the results.

In the PyDYNA installation, the docker directory has two child directories:

  • pre: Contains the package with the ls-pre Docker image for the pre service. This service provides highly abstracted APIs for creating and setting up DYNA input decks for DynaMech, DynaIGA, DynaICFD, DynaSALE, DynaEM, and DynaAirbag.

  • solver: Contains the package with the dynasolver Docker image for the solver service. This service provides highly abstracted APIs for interacting directly with the Ansys LS-DYNA solver. Because LS-DYNA is primarily a batch solver with very limited interactive capabilities, the solver service is similarly limited. The target use case is that LS-DYNA is running in a container environment such as Docker or Kubernetes. Using this service, you can push input files to the container, start LS-DYNA and monitor its progress, and then retrieve Ansys solver results (RST) files.

Once you have results, you can use the Ansys Data Processing Framework (DPF), which is designed to provide numerical simulation users and engineers with a toolbox for accessing and transforming simulation data. DPF can access data from Ansys solver RST files and from several files with neutral formats, including CSV, HDF5, and VTK. Using DPF’s various operators, you can manipulate and transform this data.

The ansys-dpf-post package provides a simplified Python interface to DPF, thus enabling rapid postprocessing without ever leaving a Python environment. For more information on DPF-Post, see the DPF-Post documentation.

Documentation and issues

Documentation for the latest stable release of PyDyna is hosted at PyDYNA documentation.

In the upper right corner of the documentation’s title bar, there is an option for switching from viewing the documentation for the latest stable release to viewing the documentation for the development version or previously released versions.

On the PyDYNA Issues page, you can create issues to report bugs and request new features. On the PyDYNA Discussions page or the Discussions page on the Ansys Developer portal, you can post questions, share ideas, and get community feedback.

To reach the project support team, email pyansys.core@ansys.com.

Usage

The next few sections show how to preprocess, solve, and postprocess a ball plate example.

Preprocess

The following code preprocesses a ball plate example. In the repository, you can get the input file from src/ansys/dyna/core/pre/examples/explicit/ball_plate/ball_plate.k and the Python file from examples/Explicit/ball_plate.py.

import os
import sys
from ansys.dyna.core.pre.dynasolution import DynaSolution
from ansys.dyna.core.pre.dynamech import (
    DynaMech,
    Velocity,
    PartSet,
    ShellPart,
    SolidPart,
    NodeSet,
    Contact,
    ContactSurface,
    ShellFormulation,
    SolidFormulation,
    ContactType,
    AnalysisType
)
from ansys.dyna.core.pre.dynamaterial import (
    MatRigid,
    MatPiecewiseLinearPlasticity,
)
from ansys.dyna.core.pre import examples

hostname = "localhost"
if len(sys.argv) > 1:
    hostname = sys.argv[1]
solution = DynaSolution(hostname)

fns = []
path = examples.ball_plate + os.sep
fns.append(path+"ball_plate.k")
solution.open_files(fns)

solution.set_termination(termination_time=10)

ballplate = DynaMech(AnalysisType.NONE)
solution.add(ballplate)

matrigid = MatRigid(mass_density=7.83e-6, young_modulus=207, poisson_ratio=0.3)
matplastic = MatPiecewiseLinearPlasticity(mass_density=7.83e-6, young_modulus=207, yield_stress=0.2, tangent_modulus=2)

plate = ShellPart(1)
plate.set_element_formulation(ShellFormulation.BELYTSCHKO_TSAY)
plate.set_material(matplastic)
plate.set_thickness(1)
plate.set_integration_points(5)
ballplate.parts.add(plate)

ball = SolidPart(2)
ball.set_material(matrigid)
ball.set_element_formulation(SolidFormulation.CONSTANT_STRESS_SOLID_ELEMENT)
ballplate.parts.add(ball)

selfcontact = Contact(type=ContactType.AUTOMATIC)
surf1 = ContactSurface(PartSet([1, 2]))
selfcontact.set_slave_surface(surf1)
ballplate.contacts.add(selfcontact)

spc = [34,35,51,52,68,69,85,86,102,103,119,120,136,137,153,154,170,171,187,188,204,205,221,222,238,239,255,256]
for i in range(1,19):
    spc.append(i)
for i in range(272,290):
    spc.append(i)
ballplate.boundaryconditions.create_spc(NodeSet(spc),rx=False,ry=False,rz=False)

for i in range(1,1652):
    ballplate.initialconditions.create_velocity_node(i,trans=Velocity(0, 0, -10))

solution.set_output_database(glstat=0.1, matsum=0.1, sleout=0.1)
solution.create_database_binary(dt=1)
serverpath = solution.save_file()

serveroutfile = '/'.join((serverpath,"ball_plate.k"))
downloadpath = os.path.join(os.getcwd(), "output")
if not os.path.exists(downloadpath):
    os.makedirs(downloadpath)
downloadfile = os.path.join(downloadpath,"ball_plate.k")
solution.download(serveroutfile,downloadfile)

Solve

The following code solves this basic ball plate example. In the repository, you can get the Python file from examples/solver/ball_plate_solver.py.

import ansys.dyna.core.solver as solver

hostname = "localhost"
port = "5000"
dyna=solver.DynaSolver(hostname,port)           # connect to the container
dyna.push("./output/ball_plate.k")                            # push an input file
dyna.start(4)                                   # start 4 ranks of mppdyna
dyna.run("i=ball_plate.k memory=10m ncycle=20000")   # begin execution

Postprocess

The following code postprocesses results from the solve of this basic ball plate example:

from ansys.dpf import core as dpf
import os

ds = dpf.DataSources()
data_path = os.path.join(os.getcwd(), 'd3plot')
ds.set_result_file_path(data_path, 'd3plot')

model = dpf.Model(ds)
# Extract displacements for all time steps from d3plot
D = model.results.displacement.on_all_time_freqs().eval()
D.animate()

stress = dpf.operators.result.stress()
stress.inputs.data_sources(ds)
stress.inputs.time_scoping([12])
stress.connect(25, [1])
stress.inputs.requested_location.connect("Nodal")
fields = stress.outputs.fields_container()

shell_layer_extract = dpf.operators.utility.change_shell_layers()
shell_layer_extract.inputs.fields_container.connect(fields)
print(shell_layer_extract.inputs.e_shell_layer)
shell_layer_extract.inputs.e_shell_layer.connect(0)
fields_top = shell_layer_extract.outputs.fields_container_as_fields_container()
print(fields_top)
fields_top.animate()

For more examples, see Examples in the PyDYNA documentation.

License

PyDYNA is licensed under the MIT license.

PyDYNA makes no commercial claim over Ansys whatsoever. This libray extends the functionality of Ansys LS-DYNA by adding a Python interface to LS-DYNA without changing the core behavior or license of the original software. The use of the interactive control of PyDYNA requires a legally licensed local copy of LS-DYNA.

For more information on LS-DYNA, see the Ansys LS-DYNA page on the Ansys website.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ansys_dyna_core-0.4.0.tar.gz (29.0 MB view details)

Uploaded Source

Built Distribution

ansys_dyna_core-0.4.0-py3-none-any.whl (29.9 MB view details)

Uploaded Python 3

File details

Details for the file ansys_dyna_core-0.4.0.tar.gz.

File metadata

  • Download URL: ansys_dyna_core-0.4.0.tar.gz
  • Upload date:
  • Size: 29.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for ansys_dyna_core-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8cd79253df0a3004dd3eb0413600c05e8688a11a7d4ed139b8697ed84a1ff7d7
MD5 a0fd96626e319fdff8184a4053a9dfb2
BLAKE2b-256 35892cfd810368be4baf8be7930994277dd0be5e766b1c0f8ebd0a5127ea44c2

See more details on using hashes here.

File details

Details for the file ansys_dyna_core-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ansys_dyna_core-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 098a60c49846a1964164cc23515fb6bb44c4fb3cdbd9138201f15f93b1e55fdc
MD5 966e4741ead9ac7eceb911b5f62bc4fb
BLAKE2b-256 fbd46b018cc45a958e9c2f680ba6293180d95eb3ab594f56ee3e154a79c5cf76

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page