Python脚本生成没有.odb的作业?

时间:2018-08-22 07:55:34

标签: python abaqus

要对Abaqus进行参数研究,我想使用Python脚本来定义参数并生成连续不同的Job。

生成作业后,脚本将分析文件odb中的结果。 该脚本几乎可以正常工作,但是作业是在没有.odb文件的情况下生成的?

你知道为什么吗?

程序已附上

预先感谢

#####################################################################
###                 Création du fichier ODB                       ###
#####################################################################
...
def create_ODB(k1, k2, cc, Gc, h, job) :
... #Abaqus scripting to create the model, the conditions, the parameters

### Create Job

mdb.Job(contactPrint=OFF, description='', echoPrint=OFF, explicitPrecision=
SINGLE, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model=
'Model-1', modelPrint=OFF, multiprocessingMode=DEFAULT, name=job,
nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1,
parallelizationMethodExplicit=DOMAIN, scratch='', type=ANALYSIS,
userSubroutine='')

###Lancement du job

mdb.jobs[job].submit(consistencyChecking=OFF)
#mdb.jobs[job].waitForCompletion()
return(k1, k2, cc, Gc, h)

这是创建和提交工作的一部分

然后我使用一个循环和一些函数来读取.odb

#####################################################################
###           Fonctions de lecture du fichier ODB                 ###
#####################################################################

from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *

def open_ODB(s='Job-1.odb'):
    """Ouvre le fichier ODB pass� en argument. Retourne un objet
odb."""
    return openOdb(path='C:/Amelie/model/macro/'+s)

def T_mean(odb):
    lastFrame = odb.steps['Thermo-electric'].frames[-1]
    temperatureField = lastFrame.fieldOutputs['NT11']
    fieldValues = temperatureField.values
    t = [v.data for v in fieldValues]
    tmean = sum(t)/len(t)
    return tmean-273

def T_max(odb) :
    lastFrame = odb.steps['Thermo-electric'].frames[-1]
    temperatureField = lastFrame.fieldOutputs['NT11']
    setData = odb.rootAssembly.instances['LAYER-6-1'].nodeSets['SET-1']
    tempField = temperatureField.getSubset(region=setData, position=NODAL)
    tempValues = tempField.values
    tmax = 0
    for t in tempValues :
        if t.data > tmax :
            tmax = t.data
    tmax=tmax-273
    return(tmax)

现在是循环:

t_k1=[i for i in range(3,8)]
t_k2=[1.16]
t_cc=[18315,25000,45000]
t_Gc=[44.25]
t_h=[5*10**(-6),5*10**(-3),5]

t=[]
i=0

i_max = len(t_k1) * len(t_k2) * len(t_cc) * len(t_Gc) * len(t_h)

t_debut = time.time()

texp=170

for k1 in t_k1:
    for k2 in t_k2:
        for cc in t_cc:
            for Gc in t_Gc:
                for h in t_h:
                    (k1, k2, cc, Gc, h) = create_ODB(k1, k2, cc, Gc, h,job="Job-"+str(i))
                    t.append((k1, k2, cc, Gc, h))
                    t_now = time.time() - t_debut
                    p = (i+1.)/i_max
                    reste = t_now/p - t_now # temps final moins temps �coul�
                    follow_calcul(i, i_max, reste, k1, k2, cc, Gc, h)
                    log_calcul(i,k1, k2, cc, Gc, h)
                    i += 1

time.sleep(50) # laisser le temps aux derniers calculs de se terminer

trouve = False

ecart_0=20
for i in range(len(t)):
    clean(i)
    (k1, k2, cc, Gc, h) = t[i]
    try:
        odb = open_ODB("Job-"+str(i)+".odb")
        tmax = T_max(odb)
        tmean = T_mean(odb)
        odb.close()
        ecart=((tmean-texp)/texp)*100
        follow_postpro(i,k1, k2, cc, Gc, h, tmax, tmean, ecart)
        log_postpro(i,k1, k2, cc, Gc, h, tmax, tmean, ecart)
        if tmax-tmean < 30 and texp-tmean < 10:
            trouve = True
            if ecart<ecart_0 :
                i_0 = i
                k1_0, k2_0, cc_0, Gc_0, h_0 = k1, k2, cc, Gc, h
                ecart_0=ecart
                tmax_0 = tmax
                tmean_0 = tmean
    except OdbError:
        pass

#Ecriture du résultat dans un fichier texte
f = open("follow_postpro.log", 'a')
f.write("==================================================\n")
f.write("===          Meilleur résultat trouvé          ===\n")
f.close()
if trouve:
    follow_postpro(i_0, k1_0, k2_0, cc_0, Gc_0, h_0, tmax_0, tmean_0, ecart_0)
else:
    f = open("follow_postpro.log", 'a')
    f.write("==================================================\n")
    f.write("rien trouvé \n")
    f.close()

有些代码部分遗漏了,但是我想我把最重要的部分和有问题的部分都放了。

很抱歉,长消息。

0 个答案:

没有答案