目前我正在编写一个Python脚本,它是从Abaqus CAE开始的。它的目的是为神经网络生成一个数据集。因此,脚本从之前定义的节点集中随机选择一个节点,并在该节点上应用置换和旋转。然后,它告诉abaqus解决该模拟,并在模拟完成后读取odb文件。之后,脚本将继续对下一个随机选择的节点执行之前选定的迭代量。 该脚本在代码方面工作得很好,但是偶尔为位移和旋转随机选择的输入对于abaqus来说太难解决,因此它会崩溃,并出现“增量错误”(为该增量生成的增量太多……)。因此,目录中有一个.lck文件,它阻止Python脚本访问odb文件,因此Python脚本也会崩溃。 我已经尝试通过编辑增量大小和最大增量数量来修复此错误,但这两种方法都不起作用。 我最新的想法是实现一个“if”条件,告诉abaqus删除所有“Job_1.*”文件,并继续处理下一个节点和其他随机选择的输入变量,前提是作业完成后直接存在一个.lck文件。但这个想法也没有奏效。正因为如此,我问你们,如果你们中有人知道我如何解决这个问题。有没有什么方法可以告诉Abaqus在发生这样的错误后应该继续使用另一个节点? 代码如下:
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
from time import *
import datetime
import string
import odbAccess
from abaqus import getInput
from random import choice
from random import random
from math import pi
from math import sqrt
import os
import glob
def create_dataset(dataset_length):
print "Start"
global dataset
a = mdb.models['Model-1'].rootAssembly
n1 = a.instances['PART-1-1'].nodes
session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)
nodes1 =n1[157:159]+n1[190:194]+n1[198:200]+n1[201:209]+n1[239:247]+.... #Abaqus Node-Set for random pick
nodesetlen=len(nodes1)
i=0
while i < dataset_length: # while-Loop with the length of the requested dataset-length
print "%i. Loop begins" %(i+1)
k = choice(range(nodesetlen)) #random-index
x = nodes1[k:k+1] # random node out of the nodeset
region = a.Set(nodes=x, name='BC_RH') # Abaqus region definition (because the new node-position )
datum = mdb.models['Model-1'].rootAssembly.datums[49]
mdb.models['Model-1'].DisplacementBC(name='BC_RH', createStepName='Step-1',
region=region, u1=(random()*30),
u2=(random()*30), u3=(random()*30),
ur1=(random()*pi/4),
ur2=(random()*pi/4), ur3=(random()*pi/4),
amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='',
localCsys=datum) # Sets the inputs for the abaqus-Job_1
mdb.jobs['Job_1'].submit(consistencyChecking=OFF) # submits the Job
print "Job ist submitted"
mdb.jobs['Job_1'].waitForCompletion() #Python waits for Abaqus until the Job is done
print "Job is done"
my_file = "U:/Job_1.lck"
with open("Job_1.sta") as rfile:
line = rfile.readlines()[-1]
if line == " THE ANALYSIS HAS NOT BEEN COMPLETED\n":
print "Increment Error next Loop will start"
sleep(30) #just to be sure that Abaqus closed all files
else:
odb = openOdb(path='Job_1.odb') # Opens ODB-File
# HERE ARE A LOT OF OUTPUT-CALCULATIONS IN THE REAL FILE
# DOESNT INFLUENCE THE PROBLEM
odb.close()
i += 1
print "Erfolgreich beendet"
return dataset
dataset_length = 500
create_dataset(dataset_length)
以下是Abaqus CAE中的错误:
^{pr2}$输出之后,Python错误窗口告诉我没有.sta文件。在
我建议使用try-except-fromhttps://docs.python.org/2/tutorial/errors.html
使用try and except子句:
在您编辑的版本中,您仍然打开并在检测到故障后尝试处理odb。在
你应该有(注意肯定的)
我不明白为什么除了打印一条错误消息之外,你还需要做任何事情,主循环将继续并创建一个新的案例,不是吗?在
我也会在提交作业之前做
os.remove("Job-1.sta")
。在相关问题 更多 >
编程相关推荐