因此,在Abaqus Scripting Interface中,没有直接的方法可以删除odb文件中的数据或复制odb,并从数据库中删除一些数据。
那么我们如何编辑odb以删除不需要的输出?
答案 0 :(得分:1)
构建已编辑的odb的一个选项是使用“odbcombine”Abaqus插件。我相信这个插件是官方支持的Abaqus产品。
该插件可以通过
从abaqus_plugins文件夹导入sys.path.insert('r'/abaqus_main/6.14-1/code/python2.7/lib/abaqus_plugins/odbCombine')
import odbCombineKernel
odbCombineKernel.combineOdbs(jobName='myjob',
configName='myconfig.xml',
loadODB=1)
要使此命令起作用,需要XML输入文件。必须使用以下内容配置XML文件:
<?xml version="1.0" ?>
<OdbInput>
<MasterOdb Name="oldjob.odb"/>
</OdbInput>
如果您只指定一个主Odb,则不需要额外的odb来组合。然后odbcombine工具作为odb过滤器而不是组合器。
答案 1 :(得分:0)
创建或多或少的空白odb的另一种方法是使用“ datacheck”选项将新分析提交到Abaqus服务器。但是,此odb仍将包含输入文件中的步骤,但没有帧。
要摆脱这些步骤,您需要提交一个没有* step / * end step关键字的修改后的输入文件。一个简单的函数可以做到这一点,例如:
def _remove_inp_steps(path, newpath):
"""Remove steps from input file so that a blank odb can be generated
Parameters
----------
path : str
Path of original input file
newpath : str
Path of new input file to create with steps removed
"""
with open(path, 'r') as f:
lines = f.readlines()
key_start = '*step'
key_end = '*end step'
is_in_step = False
# Go through file and remove all data contained within steps.
line = '** DUMMY INPUT FILE USED TO CREATE A BLANK OUTPUT DATABASE FILE; RUN WITH DATACHECK\n'
newlines = [line]
for line in lines:
line2 = line.lower()
if line2.startswith(key_start):
is_in_step = True
elif line2.startswith(key_end):
is_in_step = False
else:
if not is_in_step:
newlines.append(line)
with open(newpath, 'w') as f:
f.writelines(newlines)
return