Abaqus Python:如何编辑或删除odb输出数据库中的数据

时间:2018-03-01 17:30:47

标签: python abaqus

因此,在Abaqus Scripting Interface中,没有直接的方法可以删除odb文件中的数据或复制odb,并从数据库中删除一些数据。

那么我们如何编辑odb以删除不需要的输出?

2 个答案:

答案 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