找回密码
 注册
Simdroid-非首页
查看: 600|回复: 29

[二次开发] 请教如何用python修改inp文件中的某一材料中参数?

[复制链接]
发表于 2012-10-8 10:06:29 | 显示全部楼层 |阅读模式 来自 陕西西安
请教高手,如何利用python文件修改已有inp文件中某一材料的一个或多个参数,然后重新命名生成新的inp文件,然后由python提交工作?非常感谢~
发表于 2012-11-27 20:04:51 | 显示全部楼层 来自 德国
Simdroid开发平台
zqctate 发表于 2012-11-27 18:08
非常感谢。

1. 顿悟,为“new model” 新建了一job, 问题解决。

将10#代码修改在如下即可.
  1. from abaqus import *
  2. from abaqusConstants import *
  3. mdb.ModelFromInputFile(name='new model', inputFileName='C:/Temp/push_test.inp')
  4. m = mdb.models['new model'].materials['AL']
  5. m.elastic.setValues(table=((7000.0, 0.3), ))
  6. newJob = mdb.Job(name='push_test', model='new model', description='', type=ANALYSIS,
  7.         atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90,
  8.         memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,
  9.         explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,
  10.         modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',
  11.         scratch='', multiprocessingMode=DEFAULT, numCpus=1)
  12. #import job
  13. #newJob = mdb.JobFromInputFile(name='newJob', inputFileName='C:/Temp/push_test.inp')
  14. mdb.jobs['push_test'].writeInput(consistencyChecking=ON)
  15. newJob.submit()
  16. newJob.waitForCompletion()
复制代码
回复 0 不支持 1

使用道具 举报

发表于 2012-10-8 10:16:52 | 显示全部楼层 来自 江苏南京
本帖最后由 kxh86 于 2012-10-8 10:18 编辑

用Python在mdb.models['']下对某个参数重新setValues( ),然后job.submit()即可。
回复 不支持

使用道具 举报

 楼主| 发表于 2012-10-8 16:12:25 | 显示全部楼层 来自 陕西西安
kxh86 发表于 2012-10-8 10:16
用Python在mdb.models['']下对某个参数重新setValues( ),然后job.submit()即可。

非常感谢,在abaqus CAE中操作了一下更改参数然后看了rpy文件,看到了相应的python语句,非常感谢。
想咨询您一下,目前需要通过matlab优化输出结果,然后python自动更改inp文件,自动提交工作,然后分析结果给matlab作进一步优化……这样的循环过程不知道您有什么好的建议和意见吗?谢谢啦~
回复 不支持

使用道具 举报

发表于 2012-10-8 21:51:09 | 显示全部楼层 来自 江苏南京
hopeflydream 发表于 2012-10-8 16:12
非常感谢,在abaqus CAE中操作了一下更改参数然后看了rpy文件,看到了相应的python语句,非常感谢。
想咨 ...

可以实现。我用modeFRONTIER+Abaqus做过类似的例子。我的思路如下:
1、用matlab将要优化的参数的值(样本点或子群或某一代数据)传递给Python程序,用于改inp中的参数。我不会也没去研究怎么用matlab直接将参数传给Python程序,但是可以用matlab将所需参数写入到一个文件中,如文本文件、二进制文件等(doc、dat、txt文件皆可),然后再用Python程序读取这个文件中的参数。
2、用Python读取的参数改inp文件中的参数,实现方法很多。
3、使用Python读取odb文件中所需数据,并写入到另一个文件中(doc、dat、txt文件皆可),用matlab读取这个文件中的数据。

注:1中写入文件的数据相当于优化参数,3中写入文件的数据相当于优化目标及约束。

如有疑问,共同探讨。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2012-11-25 21:29:20 | 显示全部楼层 来自 江苏南京
本帖最后由 zqctate 于 2012-11-25 21:29 编辑
kxh86 发表于 2012-10-8 21:51
可以实现。我用modeFRONTIER+Abaqus做过类似的例子。我的思路如下:
1、用matlab将要优化的参数的值(样 ...


请问,如果是修改UMAT中的参数也是这样么?
回复 不支持

使用道具 举报

发表于 2012-11-25 22:17:55 | 显示全部楼层 来自 江苏南京
zqctate 发表于 2012-11-25 21:29
请问,如果是修改UMAT中的参数也是这样么?

可以试试,我没做过。不知为何要如此操作?
回复 不支持

使用道具 举报

发表于 2012-11-26 11:20:29 | 显示全部楼层 来自 江苏南京
kxh86 发表于 2012-11-25 22:17
可以试试,我没做过。不知为何要如此操作?

是要修改UMAT中的参数。达到优化设计

BTW  我也是南京高校的,呵呵
回复 不支持

使用道具 举报

发表于 2012-11-26 13:23:08 | 显示全部楼层 来自 江苏南京
zqctate 发表于 2012-11-26 11:20
是要修改UMAT中的参数。达到优化设计

BTW  我也是南京高校的,呵呵

Isight或modeFRONTIER都有文件解析功能,可以试一下。就是将包含UMAT的for文件作为优化流程中的一个Input文件,选中文件中的某些特定位置的数据作为优化变量。当然,也可用程序实现改for文件中的参数。
回复 不支持

使用道具 举报

发表于 2012-11-26 14:22:40 | 显示全部楼层 来自 江苏南京
kxh86 发表于 2012-11-26 13:23
Isight或modeFRONTIER都有文件解析功能,可以试一下。就是将包含UMAT的for文件作为优化流程中的一个Input ...

gotcha, thanks
回复 不支持

使用道具 举报

发表于 2012-11-27 16:29:48 | 显示全部楼层 来自 江苏南京
kxh86 发表于 2012-11-26 13:23
Isight或modeFRONTIER都有文件解析功能,可以试一下。就是将包含UMAT的for文件作为优化流程中的一个Input ...

请教
按上述思路
from abaqus import *
from abaqusConstants import *

mdb.ModelFromInputFile(name='new model', inputFileName='C:/Temp/push_test.inp')

m = mdb.models['new model'].materials['AL']
m.elastic.setValues(table=((7000.0, 0.3), ))

import job
newJob = mdb.JobFromInputFile(name='newJob', inputFileName='C:/Temp/push_test.inp')
newJob.submit()
newJob.waitForCompletion()

    发现并没有改变inp中的参数,不解。 刚接触python不久,请多多指教。
回复 不支持

使用道具 举报

发表于 2012-11-27 17:31:33 | 显示全部楼层 来自 江苏南京
本帖最后由 kxh86 于 2012-11-27 17:32 编辑
zqctate 发表于 2012-11-27 16:29
请教
按上述思路
from abaqus import *

这段Python程序改的是mdb.models['new model']中的材料的弹性模量和泊松比,不会改变C:/Temp/push_test.inp中的任何数据。因为push_test.inp导入到Abaqus后新建了一个model,在这个new model中的参数应该改了。
但是你的提交分析的job仍是原来的inp文件。
若要使用改了参数后的inp文件,则需给new model创建一个Job,并写出一个inp文件,使用新的inp提交分析。
总之,你上面的程序对于修改inp中的参数后提交是无用的,不可能实现的。
你没有把握好inp文件与Abaqus/CAE中mdb.models的关系,实际上,两个关系不大,是相互独立的。
回复 不支持

使用道具 举报

发表于 2012-11-27 17:37:59 | 显示全部楼层 来自 江苏南京
zqctate 发表于 2012-11-27 16:29
请教
按上述思路
from abaqus import *

另:你没有理解我说的“文件解析”及直接使用程序改文件参数。你的操作改的是模型的参数,不是文件的参数。
要用程序改文件的参数,可以学一下Python读取文件、写入文件的一些方法,可以按行读取文件,如果读到某一行需要改变其中一个参数,则将这一行中某参数改后重新写入一个文件。至于文件是否可以重名覆盖,我不了解,但总有方法实现,比如删除旧文件(remove())、新写入的文件命名为旧文件名。
回复 不支持

使用道具 举报

发表于 2012-11-27 18:08:58 | 显示全部楼层 来自 江苏南京
kxh86 发表于 2012-11-27 17:37
另:你没有理解我说的“文件解析”及直接使用程序改文件参数。你的操作改的是模型的参数,不是文件的参数 ...

  非常感谢。

1. 顿悟,为“new model” 新建了一job, 问题解决。
  newJob = mdb.Job(name='newJob',model='new model')
   
2. “文件解析”及程序修改方法正在学习

谢谢
回复 不支持

使用道具 举报

发表于 2012-11-29 21:31:54 | 显示全部楼层 来自 江苏南京
yaozongzhuan 发表于 2012-11-27 20:04
将10#代码修改在如下即可.

谢谢。

您的方法将之前的inp覆盖了是吧?

回复 不支持

使用道具 举报

发表于 2012-11-30 03:17:27 | 显示全部楼层 来自 德国
zqctate 发表于 2012-11-29 21:31
谢谢。

您的方法将之前的inp覆盖了是吧?

嗯. 不是说修改么? 修改的话当然是把原来的覆盖呀.
回复 不支持

使用道具 举报

发表于 2012-12-5 22:11:30 | 显示全部楼层 来自 江苏南京
本帖最后由 zqctate 于 2012-12-6 19:44 编辑
yaozongzhuan 发表于 2012-11-30 03:17
嗯. 不是说修改么? 修改的话当然是把原来的覆盖呀.


   求教
  
  手动import inp文件,修改参数再完成计算,大概5分钟

  python完成上述步骤(ABAQUS完成一次计算),却要30分钟

  十分不解。
回复 不支持

使用道具 举报

发表于 2012-12-6 17:24:52 | 显示全部楼层 来自 德国
zqctate 发表于 2012-12-5 22:11
求教
  
  手动import Job文件,修改参数再完成计算,大概5分钟

没这么夸张吧, 把JOB文件和你的程序都发上来看看, 让大家一块帮帮看看问题吧.
回复 不支持

使用道具 举报

发表于 2012-12-6 19:37:04 | 显示全部楼层 来自 江苏南京
本帖最后由 zqctate 于 2012-12-6 19:40 编辑
yaozongzhuan 发表于 2012-12-6 17:24
没这么夸张吧, 把JOB文件和你的程序都发上来看看, 让大家一块帮帮看看问题吧. ...



  • from abaqus import *
  • from abaqusConstants import *
  • def outPut(x)
  •        mdb.ModelFromInputFile(name='new model', inputFileName='C:/Temp/push_test.inp')
  •        m = mdb.models['new model'].materials['AL']
  •        m.elastic.setValues(table=((x, 0.3), ))
  •        import job
  •        newJob = mdb.Job(name='newJob', model=‘new model’)
  •        newJob.submit()
  •        newJob.waitForCompletion()
  • k=1
  • while k<3:
  •        outPut(5000)
  •        k=k+1

       inp文件随意都行。 问题就是循环(while 或者优化算法)中调用abaqus计算的函数outPut 运行时间,
比直接运行“去掉了函数定义,x改为5000”这样的代码要慢很多很多。

回复 不支持

使用道具 举报

发表于 2012-12-6 19:42:58 | 显示全部楼层 来自 江苏南京
本帖最后由 zqctate 于 2012-12-6 19:43 编辑
kxh86 发表于 2012-11-27 17:37
另:你没有理解我说的“文件解析”及直接使用程序改文件参数。你的操作改的是模型的参数,不是文件的参数 ...


大神

请帮忙看看17楼和19楼的问题吧

谢谢!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 16:07 , Processed in 0.062842 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表