abaqus python
abaqus viewer -noGUI
abaqus cae -noGUI
>>> from odbAccess import openOdb >>> odb = openOdb('indentation_axi.odb')
dir(odb)
>>> print odb.jobData
>>> print odb.diagnosticData
>>> print odb.diagnosticData.jobStatus
>>> print odb.steps
>>> print odb.steps['LOADING']
>>> print odb.steps['LOADING'].frames[-1]
>>> print odb.steps['LOADING'].historyRegions['Assembly ASSEMBLY']
>>> print odb.steps['LOADING'].frames[-1].fieldOutputs['U'].values[0]
#add pythonpath=C:\Python37\Lib\site-packages\abapy-0.1-py3.7.egg\abapy to the system environment # ABAQUS/PYTHON POST PROCESSING SCRIPT # Run using abaqus python / abaqus viewer -noGUI / abaqus cae -noGUI # Packages (Abaqus, Abapy and built-in only here) from odbAccess import openOdb from abapy.misc import dump from abapy.postproc import GetHistoryOutputByKey as gho # Setting up some pathes workdir = 'workdir' name = 'indentation_axi' # Opening the Odb File odb = openOdb(workdir + '/' + name + '.odb') # Finding back the position of the reference node of the indenter. Its number is stored inside a node set named REF_NODE. ref_node_label = odb.rootAssembly.instances['I_INDENTER'].nodeSets['REF_NODE'].nodes[0].label # Getting back the reaction forces along Y (RF2) and displacements along Y (U2) where they are recorded. RF2 = gho(odb, 'RF2') U2 = gho(odb, 'U2') # Packing data data = {'ref_node_label': ref_node_label, 'RF2':RF2, 'U2':U2} # Dumping data dump(data, workdir + '/' + name + '.pckl') # Closing Odb odb.close()
# PYTHON POST PROCESSING SCRIPT # Run using python # Packages from abapy.misc import load import matplotlib.pyplot as plt import numpy as np # Setting up some pathes workdir = 'workdir' name = 'indentation_axi' # Getting back raw data data = load(workdir + '/' + name + '.pckl') # Post processing ref_node_label = data['ref_node_label'] force_hist = -data['RF2']['Node I_INDENTER.{0}'.format(ref_node_label)] disp_hist = -data['U2']['Node I_INDENTER.{0}'.format(ref_node_label)] time, force_l = force_hist[0,1].plotable() # Getting back force during loading time, disp_l = disp_hist[0,1].plotable() # Getting backdisplacement during loading time, force_u = force_hist[2].plotable() # Getting back force during unloading time, disp_u = disp_hist[2].plotable() # Getting backdisplacement during unloading # Dimensional analysis (E. Buckingham. Physical review, 4, 1914.) shows that the loading curve must be parabolic, let's build a parabolic fit C_factor = (force_hist[1] / disp_hist[1]**2).average() disp_fit = np.array(disp_hist[0,1].toArray()[1]) force_fit = C_factor * disp_fit**2 plt.figure() plt.clf() plt.plot(disp_l, force_l, 'r-', linewidth = 2., label = 'Loading') plt.plot(disp_u, force_u, 'b-', linewidth = 2., label = 'Unloading') plt.plot(disp_fit, force_fit, 'g-', linewidth = 2., label = 'Parabolic fit') plt.xlabel('Displacement $d$') plt.ylabel('Force $F$') plt.grid() plt.legend(loc = 'upper left') plt.show()
Recent Comments