## -- I N P U T - F I L E --
##--------------------------------INFO--------------------------------
##This python script writes a text file containing maximum values of
##each requested variable for the odb mentioned in fileName variable.
##Following consideration must be taken to run this script.
## 1-This file should be placed in the abaqus temp folder i.e. the
## same folder where odb file resides.
## 2-Enter the odb name without extention (.odb)
##
##The Output of this script will be a text file (*.txt) in the
##same folder containing the maximum values and element_labels.
##
##-------------------------------------------------------------------- Name des zu analysierenden Odbs ohne Endung
###Systemdateien importieren
from abaqus import *
from abaqusConstants import *
import visualization
import odbAccess
import fileinput
import sys, os
from viewerModules import *
from odbAccess import *
from odbMaterial import *
from odbSection import *
#Viewport anlegen
myViewport = session.Viewport(name='3DShearCutting')
#session.viewports['Viewport: 1'].odbDisplay.basicOptions.setValues(averageElementOutput=True)
#session.viewports['Viewport: 1'].odbDisplay.basicOptions.setValues(averagingThreshold=75.0)
session.viewports['3DShearCutting'].makeCurrent()
session.viewports['3DShearCutting'].maximize()
# set working directory
workdir = os.getcwd()+'/'
fileName = '3D10'
#analyzed odb-file
myPath = str(workdir)+str(fileName)+'.odb'
#Output-Database oeffnen
myOdb = openOdb(path=myPath)
#zu analysierenden Step festlegen
Step=myOdb.steps['Forming']
#spaeteres Ausgabefile anlegen und oeffnen
file = open(str(workdir)+'Punch_'+fileName+'.txt', 'w')
# Ueberschrift in File
print >> file, 'Maximum Stresses (vonMises, sigma11, sigma22, sigma33) and Reaction Forces (in x,y and z direction) over all Frames \n===============================================================================================\n'
print >> file, 'Datenbasis: %s\n\n' % (fileName)
print >> file, 'Frame\tStep-Time\tVM-Stress\tEL-lab\tsigma11\t\tEL-lab\tsigma22\t\tEL-lab\tsigma33\t\tEL-lab\t sumRF-x\t sumRF-y\t sumRF-z\n'
# number of Frames auslesen
numFrames=len(Step.frames)
#for m in range(0, numFrames-1):
m = 5
# Frame-Auswahl
Frame = myOdb.steps['Forming'].frames[m]
#enthaelt alle Stress-Daten vom Letzen Frame
stress = Frame.fieldOutputs['S']
#enthaelt die RF Daten vom letzten Frame
rForce = Frame.fieldOutputs['RF']
Punch = str('ABHACKMESSER_5'+chr(176)+'-1,5MM-1')
# Auswahl der Sets
#element
stempelEl = myOdb.rootAssembly.instances[str(Punch)].elementSets['ABHACKMESSER']
#node
stempelNode = myOdb.rootAssembly.instances[str(Punch)].nodeSets['ABHACKMESSER']
Eleset = str('ABHACKMESSER_5'+chr(176)+'-1,5MM-1')+'.ABHACKMESSER'
#Stress-Daten vom Element-Set auslesen
#stempelStressEl = stress.getSubset(region=stempelEl, position=INTEGRATION_POINT)
stempelStressEl = stress.getSubset(region=stempelEl, position=ELEMENT_NODAL)
#ReactionForce-Daten vom Node-Set auslesen
rForceStempel = rForce.getSubset(region=stempelNode, position=NODAL)
#Variable, die alle Stress-Daten enthaelt kreieren
valuesStempelStressEl = stempelStressEl.values
session.viewports['3DShearCutting'].odbDisplay.basicOptions.setValues(
regionBoundaries=ELEMENT_SET, userRegions=(
str(Eleset), ), averagingThreshold=50)
#Variable, die alle ReactionForce-Daten enthaelt kreieren
valuesrForceStempel = rForceStempel.values
# Stress Vorbelegung der MaxWerte
ELVMmax = 0
VMmax = -1
sig11max = -1
sig22max = -1
sig33max = -1
ELsig11max = 0
ELsig22max = 0
ELsig33max = 0
#maxframe = 0
#maxtime = 0
# Stress Schleife zum MinMax finden (Zaehlvariable: i)
for i in valuesStempelStressEl:
#a = m
#b = Frame.frameValue
if i.mises > VMmax:
VMmax = i.mises
ELVMmax = i.elementLabel
#maxframe = a
#maxtime = b
else:
VMmax = VMmax
ELVMmax = ELVMmax
if i.data[0] > sig11max:
sig11max = i.data[0]
ELsig11max = i.elementLabel
else:
sig11max = sig11max
ELsig11max = ELsig11max
if i.data[1] > sig22max:
sig22max = i.data[1]
ELsig22max = i.elementLabel
else:
sig22max = sig22max
ELsig22max = ELsig22max
if i.data[2] > sig33max:
sig33max = i.data[2]
ELsig33max = i.elementLabel
else:
sig33max = sig33max
ELsig33max = ELsig33max
# Reaction Force Vorbelegung der Werte
sumRFx = 0
sumRFy = 0
sumRFz = 0
# Reaction Force Schleife zum Aufsummieren (Zaehlvariable: k)
for k in valuesrForceStempel:
sumRFx = sumRFx + k.data[0]
sumRFy = sumRFy + k.data[1]
sumRFz = sumRFz + k.data[2]
# print in file
print >> file, '%2d\t%10.4e\t%10.4f\t%4d\t%10.4f\t%4d\t%10.4f\t%4d\t%10.4f\t%4d\t%10.4f\t%10.4f\t%10.4f' % (m , Frame.frameValue, VMmax, ELVMmax, sig11max, ELsig11max, sig22max, ELsig22max, sig33max, ELsig33max, sumRFx, sumRFy, sumRFz)
#Ausgabefile schliessen
file.close()