Get Element Stress

##############################################################
## Get element equivalent stress from a deformed state
## https://anning.me/get-element-stress/
##############################################################

jobName = "Job Name"
stepName = "Step Name"
instanceName = "Instance name"
elementSetName = "element Set Name"
#
from odbAccess import*
from abaqusConstants import*
import string
import numpy as np
import os
#
odb = openOdb(path = jobName+'.odb')

outfile = open(jobName + '.csv', 'w')
outfile.write('Element No.' + ',' + 'EleFace_S11'  + ',' + 'EleFace_S22' + '\n')

#
fm = -1
timeFrame = odb.steps[stepName].frames[fm]
readElement = odb.rootAssembly.instances[instanceName].elementSets[elementSetName]
Stress = timeFrame.fieldOutputs['S']  # Remember to set field outputs manually
readElementStress = Stress.getSubset(position=CENTROID, region=readElement)

for i in range(len(readElementStress.values)):
    readElementFaceStress_S11 = readElementStress.values[i].data[0]  # data[0] - S11, data[1] - S22, data[2] - S33 , data[3] - S12
    readElementFaceStress_S22 = readElementStress.values[i].data[1]
    readElementFaceStress_EleLabel = readElementStress.values[i].elementLabel

    outfile.write(str(readElementFaceStress_EleLabel) + ',' + str(readElementFaceStress_S11) + ',' + str(readElementFaceStress_S22) + ',' + '\n')

outfile.close()

odb.close()