许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Python修改ABAQUS的INP计算文件

Python修改ABAQUS的INP计算文件

阅读数 5
点赞 0
article_banner

python 修改ABAQUS的inp计算文件

   这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计算,大体思路如下图所示。

   在这里插入图片描述

因此这里matlab和python各写一个接口函数,实现对数据的处理。

matlab函数

   function modify(Path,InpFile,NewData)

   %modify.m

   %libing403,2017-05-09

   ReqFile=[Path,’\modify.txt’];
fid=fopen(ReqFile,‘wt’);

   %把需要修改的inp文件和新数据文件的文件名、路径写入modify.txt

   fprintf(fid,’%s,%s.inp,%s.txt’,Path,InpFile,NewData);

   fclose(fid);
system  (‘abaqus cae noGUI=inpmodify.py’);%调用python脚本修改inp数据

   end


   这里的参数(Path,InpFile,NewData)可以由matlab主程序传递过来,语句

system(‘abaqus cae noGUI=inpmodify.py’)

   1

   实现调用修改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-*-

   #inpmodify.py

本脚本的功能是修改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]

   #读取inp文件内容

   fid=open(InpFile,“r”)

   lines=fid.readlines()

   fid.close()

   #找出原来的数据行

   startstr="*Permeability, specific=1.\n"

   startIndex=lines.index(startstr)+1

   #28个行数据需要替换

   endIndex=startIndex+28

   #读入新数据

   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

   %inp文件的路径

   Path=‘F:\security folder\ABAQUS WORKING\inversion_per’;

   %inp文件名,不需要后缀名inp

   InpFile=‘abaqus-inpfile’;

   %新数据的文件名

   NewData=‘NewData.txt’;%需要后缀名txt

   modify(Path,InpFile,NewData);%调用函数修改inp文件

   showlogfile(‘pylog.txt’);%显示python脚本运行的输出信息

 

   其中showlogfile()在我的另外一个博客Matlab目录操作及fgetl函数已有介绍。运行程序后,matlab窗口显示如下消息,表明inp文件修改成功了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fviAb9l8-1603472147787)( image \matlab窗口显示pylog信息.png)]

修改的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的功能。

强大功能,实现参数反演估计,结构迭代,优化等研究。

​ 当然实现matlab与ABAQUS的数据交互还有很多其他方法。例如一个国外学者George Papazafeiropoulos使用编写了matlab工具箱Abaqus2Matlab,可以读取ABAQUS的各种输出结果,还是很不错的。不过需要花一定时间去掌握如何使用,也有可能不符合自己的期待的功能,好像没有通过matlab进行修改inp文件或者操控ABAQUS的功能。

Abaqus2Matlab下载地址http://cn.mathworks.com/matlabcentral/fileexchange/54919-abaqus2matlab?focused=7197271&tab=example


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空