Ich bin mir nicht sicher, ob Sie das, was Sie benötigen, aus dem Werkzeug verify / mesh / tool, das Informationen zur Elementqualität liefert (Seitenverhältnisse, Internal Element Angles, usw.).
Ich bin mir auch nicht sicher, was diese charakte- ristische Länge berechnet, da ich kein abaqus-Entwickler bin und da ich nicht weiß, ob es dokumentiert ist, wie die Berechnung durchgeführt wird.
Was wir wissen ist, dass wir Skripte verwenden können, um Strings zu bekommen, die FEA-Software uns nicht zur Verfügung stellt, was wirklich gut ist. Im Folgenden sehen Sie ein kleines Beispielskript, in dem die einzelnen Elementbereiche, das Gesamt- und das Durchschnittselement, für ein 2D-Netz (XY-Ebene) berechnet werden. Das einzige, was eingestellt werden muss, ist der Name der ODB-Datei an der Spitze, und der Skalierungsfaktor (0 wenn unverschmutztes Netz verwendet wird, und> 0 oder <0, wenn ein verformtes Netz verwendet wird).
Hoffe das hilft. Man könnte natürlich auch andere Berechnungen anstellen, z. B. die durchschnittliche Seitenlänge von Elementen finden und andere Dinge ansprechen, so dass es sich nur um einen Beispielcode handelt, natürlich ohne Garantie.
Code:
from abaqus import *
from abaqusConstants import *
# create odb object from odb file
outputDatabase = session.openOdb(name= 'PlateArea'+'.odb') # get access to the nodal displacement data
frame = outputDatabase.steps[ 'Step-1' ].frames[-1]
dispField = frame.fieldOutputs['U']
# get access to the part instance -- thru which u can access the undeformed nodal position coordinates
my_part_instance = outputDatabase.rootAssembly.instances['PART-1-1']
# Write individual element areas, total areas and average element area
outFile = open( 'deformed_shape.txt' , 'w' )
# write inp header
scalefactor= 0
x=[]
y=[]
TotA=0
# get node positions
numNodesTotal = len( my_part_instance.nodes )
for i in range( numNodesTotal ):
curNode = my_part_instance.nodes[i]
defNodePos = curNode.coordinates + scalefactor*dispField.values[i].data
x.append(defNodePos[0])
y.append(defNodePos[1])
# calculate shell element areas
numElementsTotal = len( my_part_instance.elements )
for i in range( numElementsTotal ):
curElement = list( [i+1] + list( my_part_instance.elements[i].connectivity ) )
numbernodes=len(curElement)
if numbernodes-1==3 or numbernodes-1==6:
A=0.500*abs(x[curElement[1]-1]*y[curElement[2]-1]+x[curElement[2]-1]*y[curElement[3]-1]+x[curElement[3]-1]*y[curElement[1]-1]-x[curElement[2]-1]*y[curElement[1]-1]-x[curElement[3]-1]*y[curElement[2]-1]-x[curElement[1]-1]*y[curElement[3]-1])
TotA = TotA + A
#x[curElement[1]-1]
outFile.write( str( curElement[0] ) +',' + ' ' + 'Area='+ str(A) + '\n' )
else:
A=0.500*abs(x[curElement[1]-1]*y[curElement[2]-1]+x[curElement[2]-1]*y[curElement[3]-1]+x[curElement[3]-1]*y[curElement[4]-1]+x[curElement[4]-1]*y[curElement[1]-1]-x[curElement[2]-1]*y[curElement[1]-1]-x[curElement[3]-1]*y[curElement[2]-1]-x[curElement[4]-1]*y[curElement[3]-1]-x[curElement[1]-1]*y[curElement[4]-1])
#x[curElement[1]-1]
TotA = TotA + A
outFile.write( str( curElement[0] ) +',' + ' ' + 'Area='+ str(A) + '\n' )
outFile.write( 'Total Area='+ str(TotA) + '\n' )
outFile.write( 'Average Element Area='+ str(TotA/numElementsTotal) + '\n' )
outFile.close()
outputDatabase.close()
------------------
EPK
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP