python 读取abaqus温度场_[WTF Abaqus]Matlab Excel 齐上阵 助力Abaqus自动更新Amp幅值表

v2-a3884cf1c508aaf44d622e07c8678d3c_1440w.jpg?source=172ae18b

相信大家经常遇到改输入的问题,本来开开心心订好了若干个温度/载荷/换热等Amp幅值表,算都算完了发现输入要改(都是热工计算小组的锅),于是又开始了苦逼的复制粘贴之旅。

这时候你肯定会想到为啥不直接Marco宏一下。没错,我也是这么想的,然后我打开rpy档一看,(其中--为保密内容)

mdb.models['G5_G9_Temp'].amplitudes['HTC1'].setValues(timeSpan=TOTAL, 
    smooth=SOLVER_DEFAULT, data=((0.0, --), (7815.6, --), (9000.0, 
    --), (11790.0, --), (--, --), (--, --), ……

v2-51f097394b9308ab8a9a5c6469074a53_b.jpg

他mua的,这……什么鬼排版,怀念我的matlab,excel数据往里一粘就好。matlab会自动把换行识别为下一行,空格识别为下一列,直接data=[ctrl+v]就ojbk。

当然python库xlrd可以解决这个问题,但是时间紧任务重,还是决定用熟悉的工具来解决这个问题。当前痛点就是,怎么生成(x,y),(x,y),(x,y)这样格式的二维数组。

kiao,这不是用excel加工一下就行了吗,

假设我的源数据是这样的

v2-5bcbd9e2edc2980941818a061cdb733a_b.jpg

然后我就用=""&""&""这样搞不就行了

="("&A2&","&B2&")"

v2-50a0f0a0c57287b6b9a5f9be1693c458_b.jpg

然后再把这些()输出成用逗号连接的txt就行了,这matlab里面几行代码搞定的事。当然加括号这个过程你也可以直接在matlab里搞定,但我想着数据这么规整,直接在excel加好了还省我的事是吧。

clc
clear
[~,~,RAW]=xlsread('D:我的文档研务工况.xlsx',3);% 我的加括号数据放在第三个工作表的对应格子了
for i=2:24 % 遍历列 除了第一列时间列
    fid=fopen(['D:我的文档研务matlab生成',char(RAW(1,i)),'.txt'],'w');
    for j=3:3020 % 遍历行 除了两行标题
        fprintf(fid,'%s',char(RAW(j,i)));
        if j==3020 % 这个if主要是为了去掉最后一个逗号
        else
        fprintf(fid,'%s',',');
        end
    end
    fclose(fid);
end

当然这个代码是我实际用的,具体的根据个人来修改就行

然后跑一下就可以得到一系列txt,注意你的标题行不要有不能作为文件名的字符 + / 什么的

v2-e502dd0f4833f69b033a1a4801dddc9a_b.jpg

里面的内容我就不展示了,反正都是(t,x),(t,x)这样的

之后修改你abaqus里面的marco就行,在setValues指令前面加上读取txt,在后面加上关闭txt,然后把所有幅值表过一遍就行。

f = open('xxxxxxxxxx.txt')
fulltxt = f.read()
mdb.models['G5_G9_Temp'].amplitudes['xxxxxxxxxx'].setValues(timeSpan=TOTAL, 
    smooth=SOLVER_DEFAULT, data=tuple(eval(fulltxt)))
f.close

当然你也可以改成循环形式的 我就随便写写意思意思

for AmpName in ['xxx','xxx','xxx','xx'这些都是你的幅值表名]
    f = open('绝对路径目录'+AmpName+'.txt'这个是你用来找幅值表地址)
    fulltxt = f.read()
    mdb.models['YourModels'].amplitudes[AmpName].setValues(timeSpan=TOTAL, 
        smooth=SOLVER_DEFAULT, data=tuple(eval(fulltxt)))
    f.close

可能有点曲线救国了,对python熟练的同学使用xlrd就行,我还是比较习惯于matlab的语法,于是借了一下道。

然后如果要更新数据,操作就是:用热工小组更新excel表-用matlab更新txt-用marco更新幅值表 就ok了

最后说一句,matlab才是最好用的语言(雾)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值