Package: dynareadout
dynareadoutHigh-Performance and Thread-Safe C/C++ library for parsing binary output files and key files of LS Dyna (d3plot, binout, input deck) with bindings for python.DocumentationYou can find aWikiwith API Documentation for python.ExamplesBinoutfromdynareadoutimportBinoutbin_file=Nonetry:# This library also supports opening multiple binout files at once by globing thembin_file=Binout("path/to/your/binout*")exceptRuntimeErrorase:print("Failed to open binout:{}".format(e))exit(1)# Print the children of the binoutchildren=bin_file.read()for(i,child)inenumerate(children):print("Child{}:{}".format(i,child))# Read some data. This method can read variables of all different typesnode_ids=bin_file.read("nodout/ids")foriinrange(len(node_ids)):print("Node ID{}:{}".format(i,node_ids[i]))# You can also find out if a variable existsnode_ids_exist=bin_file.variable_exists("nodout/ids")# Get the number of time steps in the binoutnodout_timesteps=bin_file.get_num_timesteps("nodout")# The time steps can vary inside the binoutrcforc_timesteps=bin_file.get_num_timesteps("rcforc")# If you want to read "timed" data (x_displacement, x_force, etc.) you can do so also with the read methodx_displacement=bin_file.read("nodout/x_displacement")for(t,time_step)inenumerate(x_displacement):for(n,x_disp)inenumerate(time_step):print("X Displacement time_step={}, node_id={}:{}".format(t,node_ids[n],x_displacement[t][n]))D3plotfromdynareadoutimportD3plotplot_file=Nonetry:# Just give it the first d3plot file and it opens all of themplot_file=D3plot("path/to/your/d3plot")exceptRuntimeErrorase:print("Failed to open:{}".format(e))exit(1)# Read the titletitle=plot_file.read_title()print("Title:{}".format(title))# Read node idsnode_ids=plot_file.read_node_ids()print("Nodes:{}".format(len(node_ids)))for(i,nid)inenumerate(node_ids):print("Node{}:{}".format(i,nid))# Read node coordinates of time step 10node_coords=plot_file.read_node_coordinates(10)foriinrange(len(node_coords)):print("Node Coords{}: ({:.2f},{:.2f},{:.2f})".format(i,node_coords[i][0],node_coords[i][1],node_coords[i][2]))KeyFilefromdynareadoutimportkey_file_parsekeywords=key_file_parse("path/to/your/input.k")# Parse all nodesnode_keywords=keywords["NODE"]# Loop over all *NODE keywordsforiinrange(len(node_keywords)):# Loop over all cards of each *NODE keywordforjinrange(len(node_keywords[i])):node=node_keywords[i][j]# Then you can parse the variables of each card as integers and floats# The list of integers holds all the widths of each variable in the card in charactersnid,x,y,z=node.parse_whole([8,16,16,16])print(f"NODE{nid:d}: ({x:.3f};{y:.3f};{z:.3f})")Other languagesThis library is also available for C and C++ this version can be foundhere.Installationpython -m pip install dynareadoutUploading to PyPIMake sure that the dynareadout submodule has the correct versionUpdate the version insetup.pyandpyproject.toml. Also check if new source files have been addedPublish a new releaseCreate source distributionpython setup.py sdistUpload totest.pypi.orgpython -m twine upload --repository testpypi dist/*Then insert__token__as username and the token as password.Install package fromtest.pypi.orgto test itpython -m pip install --upgrade --no-build-isolation --index-url https://test.pypi.org/simple/ dynareadoutIf it works upload it topypi.orgCreate windows wheelpython -m buildUpload windows wheel totest.pypi.organd test it.If it works upload it topypi.orgpython -m twine upload dist/*