使用Abaqus进行仿真分析时,经常会遇到CAE界面上无法直接实现的功能,需要通过手动修改关键字的方式实现。
方式一:在Job模块生成inp文件后,打开inp并添加关键字保存后,再提交inp文件进行计算。
方式二:直接通过CAE界面的模型->“编辑关键字”实现(本质也是修改inp)。
对于自动化的仿真分析任务而言,上述两种方式均无法实现。
此时,可以使用python语言进行自动地修改关键字。若采用方式一实现,需要先生成inp文件,再读取文件进行修改,再提交inp文件创建任务,提交计算。整个过程相对较繁琐。若直接通过程序编辑关键字,则不需要调整整个仿真任务的逻辑。
本文以在“Model-1”的“Material-1”后添加非线性粘弹性材料模型为例(Abaqus界面上只能输入线性粘弹性本构模型)进行介绍。
非线性粘弹性本构的关键词用法可以查询Abaqus官方帮助文档,而关于关键字的修改需要使用KeywordBlock object。
KeywordBlock 对象以 Abaqus 的输入文件格式包含其模型的表示。通过编辑 KeywordBlock 的内容添加 Abaqus/CAE 不支持的求解器功能。通常,对 KeywordBlock 对象的编辑应在编写实际 Abaqus 输入文件之前作为最后一步进行,以避免与使用其他 MDB 命令所做的更改发生可能的冲突。
本次案例主要使用insert(position, text)方法在KeywordBlock对象的sieBlocks 成员中的指定位置插入一个字符串。
position一个整数,指定在 sieBlocks 成员中插入新字符串之后的位置。text一个字符串,指定要插入的文本。该文本表示 Abaqus 输入文件关键字及其相关数据。
一个字符串元组,指定与写入至 Abaqus 输入文件的信息相同的字符串序列。序列中的每个字符串表示一个 Abaqus 输入文件关键字以及与该关键字相关联的参数和数据行。字符串也可以是输入文件中的注释。通过调用 synchVersions 来初始化此数据成员。初始化数据成员后,通过调用replace 和 insert 将编辑记录在正确的位置。如果上次调用 synchVersions 时使用了参数 storeNodesAndElements=False,则关键字 NODE 和 ELEMENT 的条目将仅包含关键字及其参数,而不包含数据行(synchVersions 命令的执行速度会更快)。因此,主要是通过调用 synchVersions 来初始化此数据成员,然后找到待插入关键字的位置,并插入相应的文本,如下图:


from abaqus import *from abaqusConstants import *from caeModules import *def modifyKeywords(model, blockPrefix, keywordsStr): model.keywordBlock.synchVersions(storeNodesAndElements=False) # 初始化数据成员 # 通过遍历的方式寻找待插入位置 for n, block in enumerate(model.keywordBlock.sieBlocks): if block[0:len(blockPrefix)].lower() == blockPrefix.lower(): pos = n break else: print('{} keyword not found!'.format(blockPrefix)) sys.exit() if pos: model.keywordBlock.insert(pos, keywordsStr)mdb.openMdb(path='existing_model.cae')model = mdb.models['Model-1'] # 本示例采用默认的Model-1blockPrefix = '*Material, name={}'.format('Material-1') # 待添加的关键字字符串的 前一行字符串(本示例以Material-1为例)parametersData = {'Law': 'STRAIN', 'NetworkID': 1, 'Sratio': 0.4, 'LineData': [0.1, 0.15, -0.5]} # 待添加的关键字字符串中所需要的数据(字段:值)tableStr = ', '.join([str(i) for i in parametersData['LineData']])keywordsStr = '*VISCOELASTIC, NONLINEAR, LAW={}, NETWORKID={}, SRATIO={}\n{}\n'.format(parametersData['Law'], parametersData['NetworkID'], parametersData['Sratio'], tableStr) # 待添加的关键字字符串(查询keywords帮助文档)keywordsStr = keywordsStr.rstrip()modifyKeywords(model, blockPrefix, keywordsStr)
通过对程序进行简单修改,可以方便地实现材料、载荷、约束等关键字的增加和修改等。
上述代码保存为insertKeywords.py文件后,可使用类似以下批处理命令执行。
"D:\SIMULIA\Commands\abq2020.bat" cae noGUI=insertKeywords.py
创作不易,如果您感觉文章还不错,点个关注、点赞、分享、推荐吧,感谢支持!