# -*- coding: utf-8 -*- from odbAccess import * from abaqusConstants import * import part import sys # Hier die Namen anpassen odbPath = 'Test.odb' step = 'Step-1' instanz = 'BLOCK-1' SDV_old = 'SDV1' SDV_new = 'SDV_Kartoffelpuffer' # Hier wird ein ODB Objekt erzeugt und ein assembly Objekt odb = openOdb(path=odbPath) assembly = odb.rootAssembly # Frame auswaehlen for frame in odb.steps[step].frames: # Prüfen, ob FieldOutPut bereits existiert if SDV_new not in frame.fieldOutputs.keys(): # dictionary fuer Zuordnung von SDV zu Element und Gausspunkt SDV_dic = {} # SDV auslesen werte = frame.fieldOutputs[SDV_old].values for SDV in werte: if SDV.elementLabel in SDV_dic.keys(): SDV_dic[SDV.elementLabel].append( (SDV.integrationPoint , SDV.data) ) else: SDV_dic[SDV.elementLabel] = [ (SDV.integrationPoint , SDV.data) ] # nach Gausspunkten innerhalb eines Elementes sortieren for SDV_key in SDV_dic.keys(): SDV_dic[SDV_key] = sorted( SDV_dic[SDV_key] ) # nach Elementen sortieren element_list = sorted(SDV_dic.keys()) # jetzt sieht es so aus: # SDV_dic[ Element1 ] == (GP1 , SDV) # SDV_dic[ Element1 ] == (GP2 , SDV) # ... # SDV_dic[ Element1 ] == (GP8 , SDV) # SDV_dic[ Element2 ] == (GP1 , SDV) # usw. # data_list anlegen data_list = [] for element in element_list: for l in SDV_dic[element]: # l ... (GP Nummer , Data Wert) # data Wert liegt auf l[1] data_list.append( [l[1]] ) # neuen FieldPutput anlegen FO_new = frame.FieldOutput(name = SDV_new , description = 'SDV mit neuer Bezeichnung' , type = SCALAR) # Datenhinzufuegen FO_new.addData( position = INTEGRATION_POINT , instance = assembly.instances[instanz] ,\ labels = element_list , data = data_list ) else: print "neuer FieldOutPut bereits vorhanden!!!" odb.close()