ABAQUS地应力平衡脚本(源码)-自动重复导入odb法

这段代码可以实现ABAQUS自动创建作业---导入上一个作业的odb文件作为初始应力场----提交计算作业------创建新作业的循环。循环次数可以自行设定。

使用方法就是复制源码的.py文件,在CAE界面点左上角文件--运行脚本--选取.py即可。

(这段代码稍加开发可以做一个简单的小插件,不过目前已经满足我自己需要了我就懒得再开发了。其实用RSG开发个界面+代码函数化很简单。)

重复导入odb平衡地应力的方法可以参考bilibili视频,我这里就不挂链接了。

如果需要大量重复导入次数才能平衡好的模型才需要使用我这个脚本,手动三五次能平衡好的不想动手的话也可以看看。

下面我简单讲解一下源码,重复导入odb场的原理和GUI操作我就不讲了。

1.首先import各类需要的模块

# -*- coding: utf-8 -*-
from odbAccess import openOdb
from textRepr import *
from abaqus import*
from abaqusConstants import*
from caeModules import *
import csv
import regionToolset
import time
import subprocess

2.将需要在abaqus前处理中用到的变量名称参数化,比如需要设置的场变量的名称和作业的名称,这里的i代表循环次数,从0开始,每一轮循环会+1。所以每一轮循环的作业名会job-2/job-3/job-4一直增加下去。

        场名称要比job名称少1,这是因为job3的作业里需要引用job2的odb文件作为初始应力场,job4引用job3的odb文件,以此类推

    job_name = 'job-' + str(3 + i)
    job_name_d1 = 'job-' + str(2 + i)
    predefined_field_d1 = 'Predefined Field-' + str(1 + i)
    predefined_field = 'Predefined Field-' + str(2 + i)

3.注释很容易看得懂,都是一些ABAQUS前处理的命令,注意此处region区域需要自行修改,可以参考abaqus-pythonreader软件进行读取.py命令的方法进行修改。

        此处创建新场的step=1,increment=6也需要按照自己导入odb过程中稳定下来的增量步进行修改。

    # 关闭之前的定义场
    mdb.models['Model-withoutpile-0826'].predefinedFields[predefined_field_d1].suppress(
    )

    # 创建新场
    a = mdb.models['Model-withoutpile-0826'].rootAssembly
    e1 = a.instances['PART-1-1'].elements
    elements1 = e1.getSequenceFromMask(mask=('[#ffffffff:4617 #fffffff ]',), )
    region = regionToolset.Region(elements=elements1)
    mdb.models['Model-withoutpile-0826'].Stress(name=predefined_field,
                                                distributionType=FROM_FILE,
                                                fileName='D:/Desktop/Abraham/articial/ABAQUS1/'+job_name_d1+'.odb', step=1,
                                                increment=6)

    # 创建作业
    mdb.Job(name=job_name, model='Model-withoutpile-0826', description='',
            type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None,
            memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,
            explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,
            modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',
            scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1,
            numGPUs=0)
    # 提交作业
    mdb.jobs[job_name].submit(consistencyChecking=OFF)

4.一定要加这一行,不然会出现多个作业被同时创建且同时运行与中断的情况

    # 等待上一个作业完成
    mdb.jobs[job_name].waitForCompletion()

5.写一个很简单的while循环加进去

i = 0
while i<300:
#中间为刚才写的代码主体






i += 1

6.代码整体

# -*- coding: utf-8 -*-
from odbAccess import openOdb
from textRepr import *
from abaqus import*
from abaqusConstants import*
from caeModules import *
import csv
import regionToolset
import time
import subprocess


i = 0
while i<300:

    job_name = 'job-' + str(3 + i)
    job_name_d1 = 'job-' + str(2 + i)
    predefined_field_d1 = 'Predefined Field-' + str(1 + i)
    predefined_field = 'Predefined Field-' + str(2 + i)
    # 关闭之前的定义场
    mdb.models['Model-withoutpile-0826'].predefinedFields[predefined_field_d1].suppress(
    )

    # 创建新场
    a = mdb.models['Model-withoutpile-0826'].rootAssembly
    e1 = a.instances['PART-1-1'].elements
    elements1 = e1.getSequenceFromMask(mask=('[#ffffffff:4617 #fffffff ]',), )
    region = regionToolset.Region(elements=elements1)
    mdb.models['Model-withoutpile-0826'].Stress(name=predefined_field,
                                                distributionType=FROM_FILE,
                                                fileName='D:/Desktop/Abraham/articial/ABAQUS1/'+job_name_d1+'.odb', step=1,
                                                increment=6)

    # 创建作业
    mdb.Job(name=job_name, model='Model-withoutpile-0826', description='',
            type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None,
            memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,
            explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,
            modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',
            scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1,
            numGPUs=0)
    # 提交作业
    mdb.jobs[job_name].submit(consistencyChecking=OFF)
    # 等待上一个作业完成
    mdb.jobs[job_name].waitForCompletion()
    #循环计数加一
    i += 1

最后给大家看一下应用效果,我这里简单将i设置为3进行了尝试。

这里的job-3/job-4/job-5都是脚本自动创建的

可以看到预定义场也已经自行创建,接下来我们检查一下场文件是否正确。

可以看到场文件自动设置的也都正确,验证了代码的正确性,由于项目需要结果文件我就不公开在网上了。大家有需要的自行复制使用即可。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不自律的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值