Skip to main content

getting max prin stress out by python script from ABAqUS

Submitted by hermatician on

hi all,

some how i was able to make a model by importing data in pro/e and then in abaqus.

i have a problem now that I have to take out TRESCA value and max and Min priciple stresses, for all nodes.

i was able to extract coordinates by my programm but when i substitutes "S.Tresca" for COORD in the program, it doesnt work.

there has been a question that stresses are only at elements but , i think abaqus by itself extrapolates by shape functions,to the nodes, and gives value, because that is possible in post processing by abaqus, but when i write in program it doesnt work.

 

please help soon as I have to do it till the end of january.

i am including the program in here.

 



input=getInputs(('plz specify the dierectory you want to search for*.odb durchsucht werden soll :','E:\spring test 1\final study\Test'))

Home=str(input[0])



os.chdir(Home)                      #Angegebenes Verzeichnis als Arbeitsverzeichniss definieren







akPfad = getcwd()                   #Aktueller Pfad auslesen

Liste = listdir(curdir)             #alle Dateien im Pfad in eine Liste übertragen





#'For'-loop to go to the first step frame

for datei in Liste:



    if datei[-3:] == "odb":                                             #Alle .odb-Dateien der Liste werden ab hier bearbeitet



        akPfad_neu=str(akPfad).replace('\\','/')                        #Umschreibung der Pfadbezeichnung,z.B. aus 'I:\Tutorium\Tiefziehen\' wird 'I:/Tutorium/Tiefziehen/' , damit ein bearbeiten in Abaqus möglich wird

        ODB_Pfad=akPfad_neu+'/'+datei                                   #Dateipfad und Dateiname(einschließlich .odb) verknüpfen

        o1 = session.openOdb(name=ODB_Pfad)                             #.odb öffnen

        session.viewports['Viewport: 1'].setValues(displayedObject=o1)

        odb = session.odbs[ODB_Pfad]                                    #Auch hier muss der genaue Dateiname inklusive Pfad eingetragen werden









       

        nodeSetName='SET-1'               #Hier Bezeichnung des Node-Sets der Blechunterseite eintragen



        nodeSetName_Stem='SET-RP'                   #Hier Bezeichnung des Node-Set(s) des Stempel-RP's eintragen

        stepName='Step-1'                                   #Hier Bezeichnung des Auswerte-Steps eintragen

        SpringName='CURVE1-1'

               



###############################################################################################################################################################################################################################################

#################################################################################################################################################################################################################################################





        #############################              

        ##  Knoten Sets sortieren  ##

        #############################

       

        modelName=session.viewports['Viewport: 1'].displayedObject.name     #Angezeigter Modelname im .odb auslesen

        dispFileName=modelName[:-4]+'_s11.xls'                       #Definition der Ausgabedateiname (Excel-Datei)

        dispFile=open(dispFileName,'w')                                     #Erstellen+Schreibzugriff auf Ausgabedatei

        dispFile.write('Knoten \tX-Position_Blechunterseite \tY-Position_Blechunterseite \tZ-Position_Blechunterseite \n')     #Überschriftenzeile



        step = odb.steps[stepName]                                          #Auswerte-Step definieren

                         

        Anzahl_Knoten = len(odb.rootAssembly.instances[SpringName].nodeSets[nodeSetName].nodes)  #Anzahl der vorhandenen Knoten des NodeSets auslesen



        FirstFrame = odb.steps[stepName].frames[-1]                                  #Zugriff auf ersten Frame (Ausgangsposition)

        variable1=FirstFrame.fieldOutputs['S.Max.Principle']                                  #Zugriff auf Knoten-Koordinaten (im Auswerte Set)

##        variable1 = FirstFrame.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=((

##        'S', INTEGRATION_POINT, ((INVARIANT, 'Tresca'), )), ), nodeSets=(

##        'SET-1', ))       

        for i in range(Anzahl_Knoten): #In der Schleife werden die X- und Y-Koordinaten der einzelnen Punkte auf der Ober-/Unterseite ausgelesen und in eine Excel-Datei geschrieben

           

            set = odb.rootAssembly.instances[SpringName].nodeSets[nodeSetName]

            tresca=variable1.getSubset(region=set).values[i].data[0] #Z-Koordinate (.data[2])

            #NodeSet Blechunterseite

##            koord_x_unten=variable1.getSubset(region=set).values[i].data[0] #X-Koordinate (.data[0])

##            koord_y_unten=variable1.getSubset(region=set).values[i].data[1] #Y-Koordinate (.data[1])

##            koord_z_unten=variable1.getSubset(region=set).values[i].data[2] #Z-Koordinate (.data[2])



            if i==0:                                                        #Für i==0 wird eine Liste mit dem ersten Eintrag erstellt

                start1=[[tresca, i]]   #Erster Werte in der Liste ist die Z-Koordinate da nach dieser später sortiert wird. Es wird zusätzlich als

                                                                            # letzten Wert i eingetragen, dadurch können alle weiteren Listen nach dieser Reihenfolge sortiert werden

                                                                           

            else:                                                           #Für alle weiteren i's werden die Koordinaten in der Liste angehängt

                start1.append([tresca, i])

#print start



#        start1.sort()       #Sortieren der Liste nach der Z-Koordinate der Blechunterseite, (i - Reihenfolge nun, Sortierbedingung für alle weiteren Werte)



#dispFile.write('time \t 'start\t'+' \n')



for i in range(Anzahl_Knoten):

##    key += [start1[i]]

    dispFile.write('%f \t '%start1[i][0])