Matlab-python修改ABAQUS的inp计算文件
2017-05-09 16:47
337 查看
python修改ABAQUS的inp计算文件
这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计算,大体思路如下图所示。因此这里matlab和python各写一个接口函数,实现对数据的处理。
matlab函数
function modify(Path,InpFile,NewData,ModifyStr,num) %modify.m %libing403,2017-05-09 fid=fopen('modify.txt','wt'); %把需要修改的inp文件和新数据文件的文件名、路径写入modify.txt fprintf(fid,'%s,%s.inp,%s,%s,%d',Path,InpFile,NewData,ModifyStr,num); fclose(fid); system('abaqus cae noGUI=inpmodify.py');%调用python脚本修改inp数据 end
(Path,InpFile,NewData,ModifyStr,num)参数列表含义分别如下:
1)Path:inp计算文件的绝对路径。
2)InpFile:inp计算文件的文件名。
3)NewData:新数据的文件名,存储了用于替换旧数据的新数据。可事前准备或matlab其他程序生成。
4)ModifyStr:需要修改的数据行的关键字,inp计算文件的数据均由关键字开头,然后指定数据。
5)num:需要修改的数据的行数
这里的参数(Path,InpFile,NewData)可以由matlab主程序传递过来,语句
system('abaqus cae noGUI=inpmodify.py')
实现调用修改inp文件的python脚本,脚本文件名为inpmodify.py。下面给出该脚本的实现。
python脚本
首先说明要如何修改inp中的具体什么数据。我这里inp文件abaqus-inpfile.inp包含以下一段数据,其中关键字”*Permeability, specific=1.\n”,包括换行符‘\n’。这是指定材料的渗透系数以及比重,关键字后面的28行数据指定了渗透系数随孔隙比的变化,需要替换为新的数据,共有28行数据。而且我准备了新的28数据,保存在NewData.txt文件中。abaqus-inpfile.inp文件内容
... 101200., 0.149577, , 19.7647 28977.5, 0.147995, , 24.2025 *Permeability, specific=1. 1.605e-12, 1. 5.24399e-12, 1.5 1.21474e-11, 2. 2.33056e-11, 2.5 3.96889e-11, 3. 6.22521e-11, 3.5 9.1937e-11, 4. 1.29675e-10, 4.5 1.76387e-10, 5. 2.32988e-10, 5.5 3.00384e-10, 6. 3.79474e-10, 6.5 4.71152e-10, 7. 5.76307e-10, 7.5 6.95821e-10, 8. 8.30574e-10, 8.5 9.81439e-10, 9. 1.14929e-09, 9.5 1.33498e-09, 10. 1.53939e-09, 10.5 1.76336e-09, 11. 2.00776e-09, 11.5 2.27344e-09, 12. 2.56125e-09, 12.5 2.87203e-09, 13. 3.20664e-09, 13.5 3.5659e-09, 14. 3.95066e-09, 14.5 *User Defined Field *Material, name=Material-2 *Elastic ...
NewData.txt的数据:
1.605e-12, 1. 1.24399e-12, 1.5 1.21474e-11, 2. 1.33056e-11, 2.5 1.96889e-11, 3. 1.22521e-11, 3.5 1.1937e-11, 4. 1.29675e-10, 4.5 1.76387e-10, 5. 1.32988e-10, 5.5 1.00384e-10, 6. 1.79474e-10, 6.5 1.71152e-10, 7. 1.76307e-10, 7.5 1.95821e-10, 8. 1.30574e-10, 8.5 1.81439e-10, 9. 1.14929e-09, 9.5 1.33498e-09, 10. 1.53939e-09, 10.5 1.76336e-09, 11. 1.00776e-09, 11.5 1.27344e-09, 12. 1.56125e-09, 12.5 1.87203e-09, 13. 1.20664e-09, 13.5 1.5659e-09, 14. 1.95066e-09, 14.5
根据要求,编写的python脚本如下
#! /user/bin/python #- -coding: UTF-8-*- # 本脚本的功能是修改ABAQUS inp文件 #libing403,2017-5-7 import time #读取inp文件的路径及文件名内容 f=open('modify.txt','r') req=f.readline() f.close() req=req.split(',') InpFile=req[0]+'/'+req[1] NewData=req[0]+'/'+req[2] modifystr=req[3] num=req[4] #读取inp文件内容 fid=open(InpFile,"r") lines=fid.readlines() fid.close() #找出原来的数据行 startstr=modifystr startIndex=lines.index(startstr)+1 #28个行数据需要替换 endIndex=startIndex+num #读入新数据 fid=open(NewData,"r") newInp=fid.readlines() fid.close() print("%s"%newInp) #替换原来的数据行 i=0 for Index in range(startIndex,endIndex): lines[Index]=newInp[i] i=i+1 #写入新数据,替换原来的数据 fid=open(InpFile,"w") fid.writelines(lines) fid.close() #写入操作日志 meg="inpmodify message:\n inp file modify successfully\n" fid=open("pylog.txt","a") fid.write('%s\n'%meg) fid.close()
应用例子
有了上面的matlab函数modify.m和python脚本inpmodify.py,那么就可以在matlab主程序中调用它们来修改inp文件了。下面是一个例子,修改之前准备好的数据。%example.m %libing403,2017-07-09 clc Path='F:\security folder\ABAQUS WORKING\inversion_per'; %原来的inp文件名,不需要后缀名inp InpFile='abaqus-inpfile'; %新数据的文件名 NewData='NewData.txt';%需要后缀名txt ModifyStr='*Permeability, specific=1.\n'; num=28; modify(Path,InpFile,NewData,ModifyStr,num);%修改inp文件 showlogfile('pylog.txt');%显示python脚本运行的输出信息
这是一个python程序,是modify接口函数的功能的实现程序,被modify接口函数调用。其功能是根据modify.txt指定参数和新数据文件修改inp文件,并生成新的inp文件,覆盖掉旧的inp文件。inp计算文件可供runabaqus函数提交给ABAQUS求解器进行计算。
其中showlogfile()在我的另外一个博客Matlab目录操作及fgetl函数已有介绍。运行程序后,matlab窗口显示如下消息,表明inp文件修改成功了。
修改的inp文件中,渗透系数换成了新的数据,其他数据保持不变,如下
... 101200., 0.149577, , 19.7647 28977.5, 0.147995, , 24.2025 *Permeability, specific=1. 1.605e-12, 1. 1.24399e-12, 1.5 1.21474e-11, 2. 1.33056e-11, 2.5 1.96889e-11, 3. 1.22521e-11, 3.5 1.1937e-11, 4. 1.29675e-10, 4.5 1.76387e-10, 5. 1.32988e-10, 5.5 1.00384e-10, 6. 1.79474e-10, 6.5 1.71152e-10, 7. 1.76307e-10, 7.5 1.95821e-10, 8. 1.30574e-10, 8.5 1.81439e-10, 9. 1.14929e-09, 9.5 1.33498e-09, 10. 1.53939e-09, 10.5 1.76336e-09, 11. 1.00776e-09, 11.5 1.27344e-09, 12. 1.56125e-09, 12.5 1.87203e-09, 13. 1.20664e-09, 13.5 1.5659e-09, 14. 1.95066e-09, 14.5 *User Defined Field *Material, name=Material-2 *Elastic ...
小结
这里的接口函数具有一定的通用性,只需修改相关的参数可以适用于类似的情况。其中inpmodify.py脚本则要根据不同的关键字以及需要替换的数据行进行修改,通用性没那么强。这里的函数以及之前两篇博客(Matlab目录操作及fgetl函数,Matlab-python-ABAQUS数据交互及联合使用)的函数,可以用来实现Abaqus与matlab之间的数据交换,可以在matlab方便使用一些优化算法,同时利用ABAQUS的有限元建模和计算的强大功能,实现参数反演估计,结构迭代,优化等研究。当然实现matlab与ABAQUS的数据交互还有很多其他方法。例如一个国外学者George Papazafeiropoulos编写了matlab工具箱Abaqus2Matlab,可以读取ABAQUS的各种输出结果,还是很不错的。不过需要花一定时间去掌握如何使用,也有可能不符合自己的期待的功能,好像没有通过matlab进行修改inp文件或者操控ABAQUS的功能。
Abaqus2Matlab下载地址http://cn.mathworks.com/matlabcentral/fileexchange/54919-abaqus2matlab?focused=7197271&tab=example
相关文章推荐
- python脚本获取文件的创建于修改日期并计算时间差
- Abaqus-利用python处理有多个instances的odb文件,得到inp模型数据用于前处理
- Python_批量修改文件的编码格式
- python修改dns slave配置文件信息
- iOS判断沙盒文件,计算文件总量,查看IOS沙盒中文件的属性(修改日期,创建日期,大小等)
- Python学习笔记 --- python实现修改json文件
- 科学计算:Python VS. MATLAB (1)----给我一个理由先
- Python入门:计算目录下的文件大小和
- 实现python调用Matlab的.m文件
- python查找指定文件夹下所有文件并按修改时间倒序排列的方法
- python实例26[查询修改文件的属性]
- Python3.2官方文件翻译-工具列表和十进制浮点计算
- python修改文件中字符串并写入
- python 修改文件内容且重启服务(windows)
- python如何修改文件权限
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- Python : 计算大文件MD5值
- Python3 文件基本修改替换
- python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】
- 修改python新建文件时的模板