.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/Buckling_Beer_Can/beercan.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_Buckling_Beer_Can_beercan.py: Buckling of beer can example ---------------------------- This example is inspired by the “Buckling of Beer Can” example on the `LS-DYNA Examples `_ site. It shows how to use DYNA-Lib to create a keyword file for LS-DYNA and then solve it within a Pythonic environment. .. LINKS AND REFERENCES .. _ls_dyna_examples_site: https://www.dynaexamples.com/ .. GENERATED FROM PYTHON SOURCE LINES 36-39 Perform required imports ~~~~~~~~~~~~~~~~~~~~~~~~ Import required packages, including those for the keywords, deck, and solver. .. GENERATED FROM PYTHON SOURCE LINES 39-54 .. code-block:: default import os import pathlib import shutil import numpy as np import pandas as pd from ansys.dyna.keywords import Deck from ansys.dyna.keywords import keywords as kwd from ansys.dyna.run import run_dyna dynadir = "run" dynafile = "beer_can.k" .. GENERATED FROM PYTHON SOURCE LINES 55-59 Create a deck and keywords ~~~~~~~~~~~~~~~~~~~~~~~~~~ Create a deck, which is the container for all the keywords. Then, create and append individual keywords to the deck. .. GENERATED FROM PYTHON SOURCE LINES 59-558 .. code-block:: default p = pathlib.Path(dynadir) p.mkdir(parents=True, exist_ok=True) def write_deck(filepath): deck = Deck() # Append control keywords deck.extend( [ kwd.ContactAutomaticSingleSurfaceMortar(), kwd.ControlAccuracy(iacc=1), kwd.ControlImplicitAuto(iauto=1, dtmax=0.01), kwd.ControlImplicitDynamics(imass=1, gamma=0.6, beta=0.38), kwd.ControlImplicitGeneral(imflag=1, dt0=0.01), kwd.ControlImplicitSolution(nlprint=2), kwd.ControlShell(esort=2, theory=-16, intgrd=1, nfail4=1), kwd.ControlTermination(endtim=1.0), ] ) # Append database keywords deck.extend( [ kwd.DatabaseGlstat(dt=1.0e-4, binary=3), kwd.DatabaseSpcforc(dt=1e-4, binary=3), kwd.DatabaseBinaryD3Plot(dt=1.0e-4), kwd.DatabaseExtentBinary(maxint=-3), ] ) # Append part keywords beercanPart = kwd.Part() beercanPart.parts = pd.DataFrame({"heading": ["Beer Can"], "pid": [1], "secid": [1], "mid": [1], "eosid": [0]}) floorPart = kwd.Part() floorPart.parts = pd.DataFrame({"heading": ["Floor"], "pid": [2], "secid": [2], "mid": [1]}) # Append material keywords deck.extend( [ beercanPart, kwd.MatElastic(mid=1, ro=2.59e-4, e=1.0e7, pr=0.33), kwd.SectionShell(secid=1, elform=-16, shrf=0.8333, nip=3, t1=0.002), floorPart, kwd.SectionShell(secid=2, elform=-16, shrf=0.833, t1=0.01), ] ) load_curve = kwd.DefineCurve(lcid=1, curves=pd.DataFrame({"a1": [0.00, 1.00], "o1": [0.0, 1.000]})) deck.append(load_curve) # Define boundary conditions load_nodes = [ 50, 621, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, ] count = len(load_nodes) zeros = np.zeros(count) load_node_point = kwd.LoadNodePoint( nodes=pd.DataFrame( { "nid": load_nodes, "dof": np.full((count), 3), "lcid": np.full((count), 1), "sf": np.full((count), -13.1579), "cid": zeros, "m1": zeros, "m2": zeros, "m3": zeros, } ) ) deck.append(load_node_point) nid = [ 1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 621, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, ] count = len(nid) zeros = np.zeros(count) ones = np.full((count), 1) dofz = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ] boundary_spc_node = kwd.BoundarySpcNode( nodes=pd.DataFrame( { "nid": nid, "cid": zeros, "dofx": ones, "dofy": ones, "dofz": dofz, "dofrx": ones, "dofry": ones, "dofrz": ones, } ) ) deck.append(boundary_spc_node) # Define nodes and elements deck.append(kwd.Include(filename="mesh.k")) deck.export_file(filepath) return deck def run_post(filepath): pass deck = write_deck(os.path.join(dynadir, dynafile)) shutil.copy("mesh.k", "run/mesh.k") .. GENERATED FROM PYTHON SOURCE LINES 559-563 View the model ~~~~~~~~~~~~~~ You can use the PyVista ``plot`` method in the ``deck`` class to view the model. .. GENERATED FROM PYTHON SOURCE LINES 563-566 .. code-block:: default out = deck.plot(cwd=dynadir) .. GENERATED FROM PYTHON SOURCE LINES 567-570 Run the Dyna solver ~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 570-578 .. code-block:: default try: filepath = run_dyna(dynafile, working_directory=dynadir) print("completed") run_post(filepath) print("post_completed") except Exception as e: print(e) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.000 seconds) .. _sphx_glr_download_auto_examples_Buckling_Beer_Can_beercan.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: beercan.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: beercan.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_