abaqus批命令使用心得

这段时间因为一个项目工作,对abaqus的批命令使用较多,也有了一点点的心得,借此平台记录,以备将来借鉴。
首先应该明确的是,利用abaqus自带的对python的兼容性,可以十分方便快捷的完成大批量的不同工况计算,比如这次我所计算的工况有480种,之前和师兄花了近一个月时间才手动计算完毕。而这次我利用python,加上学习python程序以及编写程序,总共花费近5天解决。极大的提高了效率。
我所用到的批量处理计算包括两部分,一个是批量的提交inp文件计算一个是批量对计算结果odb文件提取数据

批量提交inp文件计算

首先,我批量提交inp文件的前提是,对之前已经生成的480种工况下的inp文件批量修改,比如这次的初速度发生了改变,利用python程序对inp文件中的载荷这部分内容修改完,得到新的inp文件,我们需要利用abaqus的批处理来帮助我们提交计算。
我所知有两种批处理方式:

  1. 利用bat文件
  2. 编写.py程序,利用abaqus的command窗口运行
    这次我们使用的是第一种方法:新建一个bat文件,并写入对应的批处理命令:
import os
workpath=[]
for root,dirs,files in os.walk('E:/ABAQUS_work/First-impact'):if len(root)>50:workpath.append(root)
with open('finalcompute.bat','w+') as sqlfile:sqlfile.write('@echo off\n')for i in range(0,len(workpath)):sqlfile.write('pushd '+workpath[i]+'\n')sqlfile.write('call abaqus job=PA01add'+' cpus=10 int'+'\n')sqlfile.write('pause')

因为我们不同工况的inp文件放在不同文件夹里,首先需要遍历所有inp文件所在的工作路径,这也是第一个片段的作用:建立包含所有inp文件路径的列表。第二个片段是将批命令代码写入到bat文件中。其中,最开始写入的“@echo off\n”是标准开头;写入的“’pushd ‘+workpath[i]+’\n‘”作用是设定工作路径,保证生成的结果文件都是在对应inp文件所在文件夹中;写入的“‘call abaqus job=PA01add’+’ cpus=10 int’+’\n’”是调用abaqus软件计算文件名为“PA01add.inp”的文件,分配10核cpu进行计算,'int’是表示一个文件计算完之后再进行下一个的计算;最后写入的“pause”作用是让计算完成之后的cmd窗口不会自动关闭,而是保持在最后完成的状态,方便我们查看在批量计算过程中是否出现问题。

批量提取数据

上一步我们已经对480种工况的inp文件进行了计算,生成了相应的odb结果文件,现在从odb文件中提取某一个点的载荷-时间曲线,所使用的方法为此前提到过的第二种方法,运行.py文件,文件内代码如下:


import os
resultpath=[]
for root,dirs,files in os.walk('E:/ABAQUS_work/First-impact'):if len(root)>50:print(root)resultpath.append(root)
from abaqus import *
from abaqusConstants import *
from viewerModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
resultname=['PA01add.odb','PA02add.odb','PA03add.odb']
houzhui=['PA01.txt','PA02.txt','PA03.txt']
for m in range(0,80):for i in range(0,3):o2 = session.openOdb(name=resultname[i],path=resultpath[m]+'/'+resultname[i])session.viewports['Viewport: 1'].setValues(displayedObject=o2)odb = session.odbs[resultpath[m]+'/'+resultname[i]]xyList = xyPlot.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('RF', NODAL, ((COMPONENT, 'RF2'), )), ), nodePick=(('ASSEMBLY', 1, ('[#1 ]', )), ), )name=resultpath[m].split('\\')name2=name[2].split('-')writefile=name2[0]+'-'+name2[1]+'-'+houzhui[i]session.writeXYReport(writefile,xyList)

其功能是在生成的odb结果文件中,读取节点RF的支反力RF2,并写入到文件中。值得注意的是,该代码的.py文件必须要在abaqus的command窗口读取,因为最开始调用的库都是abaqus内的库,如果直接用sublime之类的编辑器无法调用。
在abaqus的command窗口中,输入的内容为:

abaqus cae nogui=getdata1.py

getdata1.py为之前代码的文件。
要注意,上述代码,仅仅是将所有数据写入到了我们定义的txt文件中,且存放的位置无法调整,只能存放在getdata1.py所在的文件夹里面同时还有一些格式需要调整,还要在其中提取我们所需要的有效数据,于是我们用以下代码来实现:

import os
import openpyxl
writefilepath=[]
for root,dirs,files in os.walk('E:/C919_fuselage_stress/一次触地F-T曲线(new)/'):if len(root)>60:writefilepath.append(root)
resultpath=[]
for root,dirs,files in os.walk('E:/ABAQUS_work/First-impact'):if len(root)>50:#print(root)resultpath.append(root)
houzhui=['PA01.txt','PA02.txt','PA03.txt']for m in range(0,80):for i in range(0,3):name=resultpath[m].split('\\')name2=name[2].split('-')writefile=name2[0]+'-'+name2[1]+'-'+houzhui[i]excelfile=name2[0]+'-'+name2[1]+'-PA0'+str(i+1)+'.xlsx'with open(writefile,'r')as readfile:book=openpyxl.Workbook()sheet=book.create_sheet('sheet1',0)block=readfile.readlines()n=1label=[]for x in range(0,len(block)):if '             0.         \n' in block[x]:label.append(x)if len(label)>1:for y in range(label[0],label[1]+1):a=list(block[y])num1=[]num2=[]for z in range(0,23):if a[z]!=' ':num1.append(a[z])for z in range(23,46):if a[z]!=' ':num2.append(a[z])finalnum1=''.join(num1)finalnum2=''.join(num2)sheet.cell(n,1,float(finalnum1))sheet.cell(n,2,float(finalnum2))n=n+1if len(label)==1:for y in range(label[0],len(block)-4):a=list(block[y])num1=[]num2=[]for z in range(0,24):
#                       print(z)if a[z]!=' ':num1.append(a[z])for z in range(24,46):if a[z]!=' ':num2.append(a[z])finalnum1=''.join(num1)finalnum2=''.join(num2)sheet.cell(n,1,float(finalnum1))sheet.cell(n,2,float(finalnum2))n=n+1
#           print(writefilepath[m]+'/'+excelfile)book.save(writefilepath[m]+'/'+excelfile)

以上代码是利用第三方库openpyxl,创建一个excel,并把之前生成的数据文件中的有效数据内容,按对应的时间、载荷依次放入到Excel中。提取有效数据的方式是判断0出现的行数,仅仅提取两次出现中间的数据,然后将一行中的数据,先变成列表,然后将不为空格的部分组装成字符串,最后再将字符串转变为浮点数。(此部分的判断依据,是根据我自己的结果文件进行的判断,不同的结果判断标准各不一样)

以上内容,能够实现abaqus的批量提交计算与批量提取数据,代码很简陋很臃肿,仅作为工作经验留存,如有不足还请见谅。

参考内容:https://wenku.baidu.com/view/ee78ab75f242336c1eb95e52.html

abaqus批命令使用心得相关推荐

  1. windows Bat 批命令 教程

    转载 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小 ...

  2. Abaqus常用命令

    提交任务: abaqus job=jobname1 int 或 abaqus job=jobname1 int 双精度提交: abaqus job=jobname1 double int 任务暂停: ...

  3. linux提交abaqus作业,命令行提交 Abaqus 任务

    Abaqus 早期好像是只有通过命令行提交任务的.即使到了现在,很多人还是喜欢直接通过命令行操作.而且有时候需要用命令行提交 inp 文件进行计算还可能是因为少数 keywords 不为 Abaqus ...

  4. 批命令 set /a与set /p有哪些区别

    最佳答案 在 SET 命令中添加了两个新命令行开关: SET /A expression SET /P variable=[promptString] /A 命令行开关指定等号右边的字符串为被评估的数 ...

  5. Linux的awk命令使用心得

    awk 'BEGIN{RS="<!--|-->"}NR%2' (linux用awk来读取xml文件时,会将注释也读取进来.所以将这个注释标记为行分割符) BEGIN和E ...

  6. abaqus linux命令,linux下安装abaqus

    1 sudo apt-get install g++ 2 sudo apt-get install csh 3 sudo mount -o loop /home/zhangfei/DVD1.iso / ...

  7. 用DOS批命令写的各种病毒专杀集成---推荐收藏

    @echo off title 各种病毒清理专杀 echo ********************************************************************** ...

  8. linux命令行控制fluent,linux 提交任务的命令(ansys lsdyna abaqus fluent)

    记录ansys lsdyna abaqus fluent 的命令提交方式 abaqus  提交命令 abaqus job=input inter ansys (mmp 版本17.2) ansys172 ...

  9. 菜鸟成长日记(一)之WMIC简单命令应用

    一.什么是WMIC? WMIC扩展WMI,提供了从命令行接口和批命令脚本执行系统管理的支持.在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程 ...

最新文章

  1. WinForm 设置初始位置在屏幕右下角
  2. JS(DOM对象 表单验证与正则表达)
  3. php 手机唯一标示_Php获取移动设备唯一标识
  4. 超级计算机性能调查,调查:多数超级计算机使用Linux操作系统
  5. python 帮助教师_花10分钟写一个Python脚本,搞定了初中老师一下午的工作
  6. SpringBoot配置Druid数据源,持久层分别 mybatis,jdbc
  7. 电脑突然无法连接网络,如何处理(主要是针对QQ、微信可以登录,网页无法进入)
  8. oracle中的删除与数据库中的回收站
  9. 计算机win10无法打开小键盘,小编告诉你win10开机小键盘不自动开启的解决伎俩...
  10. 【干货干货!内附源码】多边形的面积及周长计算~java Swing开发可视化小程序,exe4j打包成exe可执行文件
  11. cad一键卸载工具叫什么_「CAD」一键卸载AutoCAD工具、拿走不谢
  12. Python 图像文本识别 EasyOCR
  13. xpath中的position()函数使用
  14. 用C语言做了一个外卖管理系统
  15. 【Python个人学习笔记】--- pyc文件(了解)
  16. bluetooth射频已关闭请打开bluetooth射频_投资笔记:5G之射频研究
  17. 【MQTT从入门到提高系列 | 01】从0到1快速搭建MQTT测试环境
  18. 如何在Windows命令行中使用Unicode字符?
  19. Visual Stidio(VS)调试中,逐语句、逐过程、跳出分别是什么意思
  20. 尉氏短期计算机培训,在尉氏烘焙短期培训时尚魅影烘焙培训

热门文章

  1. 浅谈Java、PHP、C++编程的优缺点
  2. electron-vue operation not permitted
  3. 思维模型 | 顶级的思维方法是什么样的?
  4. springcloud getway 断言规则和404的原因
  5. CommandArgument用法
  6. abstract类和方法
  7. Go语言中CGO的使用例子
  8. 南开大学计算机与科学学院,南开大学
  9. fpx对阵ig心都碎了
  10. 2021.3.8-2021.3.14周报