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')

实现调用修改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.764728977.5, 0.147995, ,  24.2025
*Permeability, specific=1.1.605e-12,   1.5.24399e-12,  1.51.21474e-11,   2.2.33056e-11,  2.53.96889e-11,   3.6.22521e-11,  3.59.1937e-11,   4.1.29675e-10,  4.51.76387e-10,   5.2.32988e-10,  5.53.00384e-10,   6.3.79474e-10,  6.54.71152e-10,   7.5.76307e-10,  7.56.95821e-10,   8.8.30574e-10,  8.59.81439e-10,   9.1.14929e-09,  9.51.33498e-09,  10.1.53939e-09, 10.51.76336e-09,  11.2.00776e-09, 11.52.27344e-09,  12.2.56125e-09, 12.52.87203e-09,  13.3.20664e-09, 13.53.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.51.21474e-11,   2.1.33056e-11,  2.51.96889e-11,   3.1.22521e-11,  3.51.1937e-11,   4.1.29675e-10,  4.51.76387e-10,   5.1.32988e-10,  5.51.00384e-10,   6.1.79474e-10,  6.51.71152e-10,   7.1.76307e-10,  7.51.95821e-10,   8.1.30574e-10,  8.51.81439e-10,   9.1.14929e-09,  9.51.33498e-09,  10.1.53939e-09, 10.51.76336e-09,  11.1.00776e-09, 11.51.27344e-09,  12.1.56125e-09, 12.51.87203e-09,  13.1.20664e-09, 13.51.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.764728977.5, 0.147995, ,  24.2025
*Permeability, specific=1.1.605e-12,   1.1.24399e-12,  1.51.21474e-11,   2.1.33056e-11,  2.51.96889e-11,   3.1.22521e-11,  3.51.1937e-11,   4.1.29675e-10,  4.51.76387e-10,   5.1.32988e-10,  5.51.00384e-10,   6.1.79474e-10,  6.51.71152e-10,   7.1.76307e-10,  7.51.95821e-10,   8.1.30574e-10,  8.51.81439e-10,   9.1.14929e-09,  9.51.33498e-09,  10.1.53939e-09, 10.51.76336e-09,  11.1.00776e-09, 11.51.27344e-09,  12.1.56125e-09, 12.51.87203e-09,  13.1.20664e-09, 13.51.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

matlab-python修改ABAQUS的inp计算文件相关推荐

  1. python修改ABAQUS的inp计算文件

    python修改ABAQUS的inp计算文件 这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计 ...

  2. abaqus python 读取文件_利用Python修改Abaqus的inp文件(关键字)

    利用Python修改Abaqus的inp文件(关键字) Abaqus的关键字可以直接打开inp文件或者在Abaqus的key word里面直接修改,当然除了这个,还可以利用Python语言进行修改,也 ...

  3. MATLAB如何修改打开时的默认文件夹或默认路径

    参考这篇文章: https://www.cnblogs.com/mat-wu/p/6135555.html 有一点需要补充,如果路径是有中文,那么使用notepad修改matlabrc.m后,会出现路 ...

  4. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词

    #coding:utf-8 import os,repath = 'test' files = os.listdir(path)def count_word(words):dic = {}max = ...

  5. python 修改excel内容转PDF文件

    from win32com import client import win32apidef exceltopdf(doc):excel = client.DispatchEx("Excel ...

  6. Matlab调用Python读取Abaqus模型操作

    前言: 在工程有限元软件中,abaqus因为强大的软件建模与云图分析,再加上其内核语言及接口都是使用简单上手的脚本语言python进行的编写,而受到广泛的运用,但对计算输出结果数据没有提供很好的访问和 ...

  7. 批量执行ABAQUS的inp文件——整理

    参考链接 [1]<ABAQUS批处理技巧>https://www.doc88.com/p-1925428610474.html [2]<python实现批量存储文件信息到指定文件&g ...

  8. 全面对比 MATLAB、Julia、Python,谁在科学计算中更胜一筹?

    数百种编程语言,各有优劣,各自也都有自己最为适用的场景.那么就科学计算领域而言,主流的 MATLAB.Julia.Python 会有哪些最为独特的优势呢?又存在哪些让开发者无力的缺陷?在本文中,我们将 ...

  9. python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...

    运行: Cmd中运行:abaqus scrip=plot.py 之所以用python因为abaqus的界面是基于python的,用它来进行批处理或者后处理是比较不错的,希望能和大家分享abaqus的更 ...

最新文章

  1. [2018雅礼集训1-16]方阵
  2. MFC Initinstance中DoModal()返回-1
  3. ASP.NET Performance Monitoring, and When to Alert Administrators
  4. HDU - 2438 Turn the corner(三分)
  5. date oracle 显示毫秒_Oracle中根据Date型转换成Java对应的long型毫秒数
  6. stream of java_java8新特性之强大的Stream API
  7. keil_4/MDK各种数据类型占用的字节数
  8. 计算机专业简述,简述计算机专业毕业论文完整版.doc
  9. 阿里 P6 和 P7 的主要区别是什么?
  10. ISO9001认证审核常见问题大汇总
  11. 计算机图形学基础第七章ppt,第三章 计算机图形学基础ppt课件.ppt
  12. cityscape train.txt 数据 python读取子文件夹内所有文件
  13. html粒子特效图片切换,javascript转换静态图片,增加粒子动画效果
  14. android将毫秒转换成日期,如何在Android中将毫秒转换为日期格式?
  15. PPT柱形统计图制作详情——小白秒变大神
  16. 云学python (第二章用编程改造世界·小练习)《vamei-从Python开始学编程》
  17. 分布式计算系统导论:原理与组成pdf
  18. 管家婆服务器备份文件夹,请问管家婆数据备份在哪里?如何恢复?
  19. JavaScript Eval Encode/Decode JavaScript Eval 在线加密/解密, 编码/解码工具
  20. dbm数据库源代码分析(3):头文件部分

热门文章

  1. 华笔记本linux系统方便吗,买华为国产Linux系统笔记本电脑的几个好处
  2. shell 正则取出中间文本。
  3. yum.repos.d目录中文件消失如何解决
  4. Java高并发编程 (马士兵老师视频)笔记(一)同步器
  5. 精伦的开发盒子USB上外挂SD卡路径
  6. 如何从Docker容器内部获取Docker主机的IP地址
  7. PS新手教程!五分钟绘制一张半调效果的耐克体育海报
  8. disk-磁盘检测工具(二合一)
  9. mysql索引优化longtext_mysql中longtext存在大量数据时,会导致查询很慢?
  10. 微信小程序:获取用户手机号