Hallo CM,
Vielen Dank für so schnell Antwort von Dir.
Mein Programm handelt sich um Datei-Transport zwischen zwei File. Eine davon ist alt und groß, die andere ist neu generiet und klein. Ich wähle die notwendige Information aus die Alte und kopiert sie zu der Neue.
Die Skript sieht so aus:
Code: Alles auswählen
from odbAccess import *
from abaqusConstants import *
import sys
#
# read command line and check parameters
argList = sys.argv
argc=len(argList)
i = 0
requiredArgs = 1
while (i < argc):
if (argList[i][:2]=="-s"):
stepNumber = int(argList[i+1])
requiredArgs +=2
elif (argList[i][:3]=="-od"):
o1Name = argList[i+1]
requiredArgs +=2
elif (argList[i][:3]=="-ou"):
o2Name = argList[i+1]
requiredArgs +=2
elif (argList[i][:2]=="-i"):
frameNumber = int(argList[i+1])
requiredArgs +=2
elif (argList[i][:2]=="-n"):
newStepName = argList[i+1]
elif (argList[i][:2]=="-h"):
print ' '
print ' '*15+'RDBS Usage:\n'+'-'*50+__doc__
sys.exit(0)
i+=1
# open odbs
o1=openOdb(o1Name+'.odb')
o2=openOdb(o2Name+'.odb')
#
step_o1=o1.steps[o1.steps.keys()[stepNumber-1]]
frame_o1=step_o1.frames[frameNumber]
#
# create new step or use existing step
newDomain=step_o1.domain
newProcedure=step_o1.procedure
step_o2=o2.Step(name=stepName,description='new',domain=newDomain,
timePeriod=1.0, procedure=newProcedure)
#
# create new frame
frame_o2=step_o2.Frame(frameId = frameNumber, frameValue = frame_o1.frameValue,
description = frame_o1.description)
#
# add data to new frame
for out in frame_o1.fieldOutputs.keys():
field = frame_o1.fieldOutputs[out]
#
# search for conjugated data
if out in ('U','UR'):
newField = frame_o2.FieldOutput(name=out, description=field.description,
type=field.type, validInvariants=field.validInvariants,
componentLabels=field.componentLabels)
for i in range(len(field.values)):
print i
newField.addData(position=NODAL, instance=field.value[i].instance,
labels=(field.value[i].nodeLabel,), data=(tuple(field.value[i].data),),
conjugateData=(tuple(field.value[i].conjugateData),))
# save and close odbs
o2.save()
o2.close()
o1.close()
Der Einzelnkommando verfügbar ist "field.addData(...)", und er erlaubt Knoten zu Knoten Kopie zwischen die zwei Datein. Die Größe von "len(field.values)" ist ungefähr 50,000. Durch "print i" sehe ich, dass die erste 2,000 Knoten sind sehr schnell kopiert (5 min), dann wird es immer langsamer werden. Während es ist die von Python benutzt Ram von 100 MB bis zu 200 MB gestiegen, aber nicht weiter.
Was soll ich weiter machen?
Gruß
nov