__author__ = "Krzysztof Bzowski"
__version__ = "1.0.0"
from abaqusConstants import *
from math import *
import odbAccess
import multiprocessing as mp
import os
################# CONFIGS #####################
odb11File = 'SSRVE_11'
odb12File = 'SSRVE_12'
odb22File = 'SSRVE_22'
maxPercent = 0.01
###############################################
def avgMaxFromPercentList(l, percent, revSort):
l.sort(reverse=revSort)
maxElements = int(ceil(len(l) * maxPercent))
lmax = l[:maxElements]
avg = sum(lmax) / float(len(lmax))
return avg
def Analize(resultFile, direction, inOrder):
try:
os.remove(resultFile + '.txt')
except OSError:
pass
try:
os.remove(resultFile + '_MAX.txt')
except OSError:
pass
odb = odbAccess.openOdb(resultFile+'.odb', readOnly=True)
step=odb.steps['Step-1']
frames = step.frames
# Stress/Strain Curve
for frame in frames:
stress=frame.fieldOutputs['S'].getSubset(position=INTEGRATION_POINT).values
strain=frame.fieldOutputs['PE'].getSubset(position=INTEGRATION_POINT).values
volumes=frame.fieldOutputs['EVOL'].values
count = len(volumes)
summVol = 0
summStress = 0
summStrains = 0
for i in range(0, count):
s = stress[i].data[direction] # S
p = strain[i].data[direction] # PE
v = volumes[i].data # VOLUME
summVol += v
summStress += s*v
summStrains += p*v
avgStress = summStress/summVol
avgStrain = summStrains/summVol
myFile = open(resultFile+'.txt', 'a')
myFile.write('{0}\t{1}\n'.format(abs(avgStrain), abs(avgStress)))
myFile.close()
# Max stress / strain
lastFrame = frames[-1]
stress=lastFrame.fieldOutputs['S'].getSubset(position=INTEGRATION_POINT).values
strain=lastFrame.fieldOutputs['PE'].getSubset(position=INTEGRATION_POINT).values
count = len(stress)
stressList = [None] * count
strainList = [None] * count
for i in range(0, count):
stressList[i] = stress[i].data[direction] # S
strainList[i] = strain[i].data[direction] # PE
maxStress = avgMaxFromPercentList(stressList, maxPercent, inOrder)
maxStrain = avgMaxFromPercentList(strainList, maxPercent, inOrder)
file = open(resultFile+'_MAX.txt', 'w')
file.write('{0}\t{1}\n'.format(maxStrain, maxStress))
file.close()
odb.close()
if __name__ == '__main__':
print __name__
direction11 = 0
direction22 = 1
direction12 = 3
p11 = mp.Process(target=Analize, args=(odb11File, direction11, False))
p22 = mp.Process(target=Analize, args=(odb22File, direction22, False))
p12 = mp.Process(target=Analize, args=(odb12File, direction12, True))
p11.start()
p22.start()
p12.start()
p11.join()
p22.join()
p12.join()