cscuxj 发表于 2007-7-21 01:02

材料参数的循环怎么做?

我做的一个分析是这样的:一个结构里面的两块是不同的材料做的   现在要求它们的模量变化组合时的结构应变   
请问这种情况ANSYS可以在通过循环来完成这种参数的变化吗?我现在是用把APDL里面定义的参数改一次算一次很麻烦:@(

[ 本帖最后由 xuruikl 于 2007-7-31 08:45 编辑 ]

rodge 发表于 2007-7-22 11:29

不知你是不是想寻找,两种模量组合下的最小结构应变?
这个应该可以试试用优化设计的方法考虑,定义组合系数为设计变量,结构应变为目标函数,

cscuxj 发表于 2007-7-23 00:49

回复 #2 rodge 的帖子

我是要建一个多种模量变化情况下应力应变的数据库    所以要做循环的   有没有详细点的命令流啊?

rodge 发表于 2007-7-23 09:32

如果是这样的话,我觉得可以编个小程序,调用ansys,输入需要变化的参数,然后输出所需要的结果文件。
或者像你所说的在APDL中设置循环,设置一个大的循环,循环下包括结果的提取和写入文件
举个简单的例子
!设置变量的初始值
!你的建模部分
!有限元模型建立过程
*do,i,1,N,1
solve
fini
/post1
!提取你需要的结果数据,写入一个数组或文件中
fini
/prep7
!根据你需要的修改变量值(这个是看你怎么变化了)
fini
/solu
*enddo

cscuxj 发表于 2007-7-26 19:50

回复 #4 rodge 的帖子

循环时,模量变化了,要清除原来的网格重新划分网格,那么循环一次就要重新划网格比较费时间,有没有什么方法在网格划好后开始循环,每次循环时改变材料参数,不经过重新划分网格这个步骤呢?有没有这样的例子啊?发个给我啊
cscuxj@126.com谢谢

rodge 发表于 2007-7-27 21:51

重新定义材料,不需要重新划分网格吧,

cscuxj 发表于 2007-7-28 00:07

回复 #6 rodge 的帖子

rodge ,我的例子的命令流如下,你告诉我怎么让材料循环计算吧:
/PREP7
!*
ET,1,SOLID95
!*
*dim,maxsx,array,27,2
K, ,0,0,5.52,   
K, ,4.5,0,5.52,
K, ,4.5,10,5.52,
K, ,0,10,5.52,
K, ,0,0,5.45,   
K, ,4.5,0,5.45,
K, ,4.5,10,5.45,
K, ,0,10,5.45,
LSTR,1,2
LSTR,2,3
LSTR,3,4
LSTR,1,4   
LSTR,5,6   
LSTR,6,7   
LSTR,7,8      
LSTR,5,8      
LSTR,1,5   
LSTR,2,6      
LSTR,3,7      
LSTR,4,8
AL,1,2,3,4
AL,5,6,7,8
AL,1,5,9,10
AL,3,7,11,12
AL,2,6,10,11
AL,4,8,9,12
FLST,2,1,8
FITEM,2,2.25,5,5.52
WPAVE,P51X
PCIRC,0.15,0,0,360,
RECTNG,-0.18,0.18,-0.18,2,   
CSYS,0
WPAVE,0,0,0
CSYS,0   
!*
FLST,2,2,5,ORDE,2   
FITEM,2,1   
FITEM,2,8   
AOVLAP,P51X
FLST,2,2,5,ORDE,2   
FITEM,2,7   
FITEM,2,-8
AOVLAP,P51X
FLST,2,8,5,ORDE,3   
FITEM,2,1   
FITEM,2,-7
FITEM,2,9   
VA,P51X
BLOCK,0,5,0,10,5.15,5.45,   
BLOCK,0,5,0,10,5,5.15,
BLOCK,0,6.8,0,10,0,5,
FLST,2,4,6,ORDE,2   
FITEM,2,1   
FITEM,2,-4
VGLUE,P51X
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,1,,40E6   
MPDATA,PRXY,1,,0.35
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,2,,200E6
MPDATA,PRXY,2,,0.25
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,3,,1300E6
MPDATA,PRXY,3,,0.25
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,4,,1200E6
MPDATA,PRXY,4,,0.25
TYPE,   1   
MAT,       1
REAL,   
ESYS,       0   
SECNUM,
!*
MSHAPE,1,3D
MSHKEY,0
!*
CM,_Y,VOLU
VSEL, , , ,       7
CM,_Y1,VOLU
CHKMSH,'VOLU'   
CMSEL,S,_Y
!*
VMESH,_Y1   
!*
CMDELE,_Y   
CMDELE,_Y1
CMDELE,_Y2
!*
TYPE,   1   
MAT,       2
REAL,   
ESYS,       0   
SECNUM,
!*
VPLOT   
CM,_Y,VOLU
VSEL, , , ,       5
CM,_Y1,VOLU
CHKMSH,'VOLU'   
CMSEL,S,_Y
!*
VMESH,_Y1   
!*
CMDELE,_Y   
CMDELE,_Y1
CMDELE,_Y2
!*
VPLOT   
TYPE,   1   
MAT,       3
REAL,   
ESYS,       0   
SECNUM,
!*
CM,_Y,VOLU
VSEL, , , ,       6
CM,_Y1,VOLU
CHKMSH,'VOLU'   
CMSEL,S,_Y
!*
VMESH,_Y1   
!*
CMDELE,_Y   
CMDELE,_Y1
CMDELE,_Y2
!*
VPLOT   
TYPE,   1   
MAT,       4
REAL,   
ESYS,       0   
SECNUM,
!*
CM,_Y,VOLU
VSEL, , , ,       1
CM,_Y1,VOLU
CHKMSH,'VOLU'   
CMSEL,S,_Y
!*
VMESH,_Y1   
!*
CMDELE,_Y   
CMDELE,_Y1
CMDELE,_Y2
!*
FINISH
/SOL
FLST,2,1,5,ORDE,1   
FITEM,2,21
!*
/GO
DA,P51X,ALL,
FLST,2,1,5,ORDE,1   
FITEM,2,7   
/GO
!*
SFA,P51X,1,PRES,0.7E6   
SFGRAD,PRES, ,Z, , ,
/STATUS,SOLU
SOLVE
ASEL,S, , ,       2
NSLA,S,1
!   
FINISH
/POST1
!*
NSORT,S,X,0,0, ,0
!
*get,maxsx(1,1),sort,0,min

其中,材料1,2,3,4的模量同时循环套嵌,而不用重新划分网格该怎么办啊?写个命令流出来吧
还有我划分网格时提示的警告该怎么处理啊?谢谢

cscuxj 发表于 2007-7-28 00:09

回复 #6 rodge 的帖子

还有那个划分网格的命令流好长 怎么精简点啊?
还有就是循环时可以把提取数据的也一起循环提取数据吗?

rodge 发表于 2007-7-29 22:56

回复 #7 cscuxj 的帖子

给你说一种思路吧,修改单元属性
不是有4种材料吗,你先定义5种材料,其中一种随便,只是为了中间过程需要
用修改单元属性的方法修改单元的材料
举个例子:
ESEL,S,MAT,,1    !!!!!先选出材料为1的单元,
EMODIF,all,MAT,5, !!!!!将其材料修改为备份的过渡材料
ESEL,S,MAT,,2      !!!!!选择材料为2的单元,修改为材料1,以下类同
EMODIF,all,MAT,1,
ESEL,S,MAT,,3
EMODIF,all,MAT,2,
ESEL,S,MAT,,4
EMODIF,alll,MAT,3,
ESEL,S,MAT,,5
EMODIF,all,MAT,4,

该怎么利用循环,可以自己慢慢研究

[ 本帖最后由 xuruikl 于 2007-7-30 09:08 编辑 ]

rodge 发表于 2007-7-29 23:05

划分网格时提示的警告该怎么处理啊?
还有那个划分网格的命令流好长 怎么精简点啊?
还有就是循环时可以把提取数据的也一起循环提取数据吗?
划网格时的警告,看是怎么样的警告了,如果是问题不大的警告,就可以忽略,总之看警告提示,关闭警告提示也可以
/uis,msgpop,3可以去掉警告的显示

你的划分网格命令流那是GUI操作后的log命令流,想精简,改回一般的命令流不就可以了

想提取的数据可以先循环放在数组里,也可以循环写文件

cscuxj 发表于 2007-7-30 08:38

VSEL, , , ,       5
CM,_Y1,VOLU
CHKMSH,'VOLU'   
CMSEL,S,_Y
!*
VMESH,_Y1   
!*
CMDELE,_Y   
CMDELE,_Y1
CMDELE,_Y2
!*
VPLOT   
TYPE,   1   
MAT,       3
REAL,   
ESYS,       0   
SECNUM,
!*
CM,_Y,VOLU
像这个划分网格的该怎么精简啊?
FITEM,2,1   这个是什么意思啊?

cscuxj 发表于 2007-7-31 01:15

回复 #10 rodge 的帖子

做了一次循环虽然可以处结果但是每次变化材料后都要重新加载   有没有可以不重新加载的方法啊?
那些象
ESEL,S,MAT,,1   
EMODIF,all,MAT,5,
finshi
/SOL
........

/STATUS,SOLU
SOLVE
这种命令该怎么写啊?
还有定义材料MAT矩阵在哪里定义啊?

我的部分命令流
/PREP7
allsel
ESEL,S,MAT,,1   
FLST,2,1641,2,ORDE,2
FITEM,2,1   
FITEM,2,-1641   
EMODIF,P51X,MAT,2,
FINISH
/SOL
allsel
FLST,2,1,5,ORDE,1   
FITEM,2,21
!*
/GO
DA,P51X,ALL,
FLST,2,1,5,ORDE,1   
FITEM,2,7   
/GO
!*
SFA,P51X,1,PRES,0.7E6   
SFGRAD,PRES, ,Z, , ,
/STATUS,SOLU
SOLVE
allsel
*get,fwduy(1,2),node,7005,uz
*get,fwduy(2,2),node,6625,uz
*get,fwduy(3,2),node,6626,uz
*get,fwduy(4,2),node,6617,uz
*get,fwduy(5,2),node,6618,uz
*get,fwduy(6,2),node,6627,uz
*get,fwduy(7,2),node,6628,uz
*get,fwduy(8,2),node,6623,uz

rodge 发表于 2007-7-31 01:34

看你的循环到底是怎么加的啊,如果模型没变的话,你又不删除载荷,为什么还需要在每次循环后再加载荷?原来的载荷不是还可以用来计算吗
定义材料的MAT不就是你自己定义的几种材料吗
你用来循环的只需要是

/prep7
!!!!!你的模型建立,你的材料定义,你的网格划分
/solu
!!!!!你的载荷施加
*do,i,1,N,1
/solu
solve
/post1
*get,,,,   !!!!!是你得到的数据,可以保存在一个数组里,也可以写入文件
!!!你修改材料的参数,用选择单元的方法,将单元选出来,再用EMODIF修改单元的属性
*enddo

这样不是就可以了,没有你所提出来的,一会要重划网格,一会要重新定义载荷,除非这载荷是在循环的过程中改变的

cscuxj 发表于 2007-8-1 00:03

回复 #13 rodge 的帖子

我的模型和荷载都是不变的只是结构的不同部分模量变化了荷载可以重复使用   结构一共四个部分,每个部分的模量有四种变化取值,计算就是计算各种模量不同组合下的应变计算结果
假设四种结构的材料编号:
结构一材料编号:11,12,13,14
二:                   21,22,23,24
三:                   31,32,33,34
四:                   41,42,43,44               
/prep7
!!!!!模型建立,材料定义,网格划分(初始模量组合)
/solu
!!!!!载荷施加
a=11,
b=21,
c=31,
d=41,
*do,i,1,4,1
*do,j,1,4,1
    *do,k,1,4,1
       *do,l,1,4,1
/solu
solve
/post1
*get,,,,   !!!!!
ESEL,S,MAT,,a    !!!!!先选出材料为1的单元,
EMODIF,all,MAT,i+10, !!!!!将其材料修改为材料1变化的模量值
a=i+10,
ESEL,S,MAT,,b      !!!!!选择材料为2的单元,修改为材料2变化的模量值
EMODIF,all,MAT,j+20,
b=j+20,
ESEL,S,MAT,,c
EMODIF,all,MAT,k+30,
c=k+30,
ESEL,S,MAT,,d
EMODIF,all,MAT,l+40,
d=l+40,
      *enddo
    *enddo
*enddo
*enddo

如上,每循环一次,只有一个模量发生变化,共4*4*4*4=256种变化,我上面的做法和写法不知道可以不?
可以把材料库做成一个数组来提取吗?

cscuxj 发表于 2007-8-1 22:37

回复 #13 rodge 的帖子

循环可以做出来了 但是提取的结果总是第一次循环的结果?为什么?
a=11,
b=21,
c=31,
d=41,
*do,i,1,3,1
/PREP7
allsel
ESEL,S,MAT,,a   
FLST,2,1641,2,ORDE,2
FITEM,2,1   
FITEM,2,-1641   
EMODIF,P51X,MAT,i+10,
a=i+10,
FINISH
/SOL
allsel
FLST,2,1,5,ORDE,1   
FITEM,2,21
!*
/solu
solve
/post1
allsel
*get,fwduy(1,i),node,7005,uz
*get,fwduy(2,i),node,6625,uz
*get,fwduy(3,i),node,6626,uz
*get,fwduy(4,i),node,6617,uz
*get,fwduy(5,i),node,6618,uz
*get,fwduy(6,i),node,6627,uz
*get,fwduy(7,i),node,6628,uz
*get,fwduy(8,i),node,6623,uz
*enddo
页: [1] 2
查看完整版本: 材料参数的循环怎么做?