Pobieranie tensora naprężeń z pliku wynikowego Abaqusa
Skrypt pobiera tensor naprężeń z pliku wynikowego abaqusa a następnie tworzy krzywą odkształcenie/naprężenie. Skrypt działa równolegle Skrypt pobiera maksymalne wartości z ostatniego kroku obliczeń i zapisuje je do pliku
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
__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() |
