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

[OptiStruct] optistruct使用外部函数作为相应或者约束条件

[复制链接]
发表于 2014-4-24 22:07:35 | 显示全部楼层 |阅读模式 来自 四川成都
请教一下,怎样编写一个外部函数作为约束,由optistruct调用计算呢,也就是DRESP3卡片。帮助里面有个例子,但是太简单,不太明白具体怎么编制程序,谢谢解答
发表于 2014-4-25 13:33:09 | 显示全部楼层 来自 上海
Simdroid开发平台
OptiStruct > User's Guide > Design Optimization > Responses > External Responses

看帮助吧兄弟
回复 不支持

使用道具 举报

 楼主| 发表于 2014-4-25 15:07:25 | 显示全部楼层 来自 四川成都
我已经看过那个帮助了,感觉没有啊,能不能提供一个实际的程序,我自己研究研究
回复 不支持

使用道具 举报

发表于 2014-4-28 14:41:07 | 显示全部楼层 来自 上海
lchmecha 发表于 2014-4-25 15:07
我已经看过那个帮助了,感觉没有啊,能不能提供一个实际的程序,我自己研究研究 ...

http://forum.simwe.com/forum.php?mod=viewthread&tid=1102743
回复 不支持

使用道具 举报

 楼主| 发表于 2014-4-30 15:25:29 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-4-28 14:41
http://forum.simwe.com/forum.php?mod=viewthread&tid=1102743

谢谢你的解答,看了你的帖子收获很大,但是有些地方还是不理解,比如那个“rparam[1]”,这个是dresp3的输入值是吧,比如我在optistruct中定义了几个响应,id分别是1,2,3,4……,其中第一个响应作为目标,其余的响应需要使用脚本程序运算,那么此时rparam[1]调用的响应是id号为1的吗?还是其余要运算的响应呢?
回复 不支持

使用道具 举报

发表于 2014-4-30 15:56:28 | 显示全部楼层 来自 上海
lchmecha 发表于 2014-4-30 15:25
谢谢你的解答,看了你的帖子收获很大,但是有些地方还是不理解,比如那个“rparam[1]”,这个是dresp3的输 ...

不用谢

rparam[1]是输入值,也就是你DRESP3建立的表达式右端项的一个变量,比如表达式是F(x,y,z,a,b,c)=(x+y+z-a-b-c) , 那么rparam[1]就是x, rparam[2]就是y, 以此类推。

如果在你的举例中,只有一个输入值,响应id号是1,那么就是rparam[1], 其他的id=2/3/4是输出值,由rresp和iresp来控制,如果iresp = 1, 则输出rresp,若iresp=0,则不输出。
再之,DRESP3中的输入值rparam不一定是你定义的响应,也可以是设计变量DESVAR。
回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-1 03:21:05 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-4-30 15:56
不用谢

rparam[1]是输入值,也就是你DRESP3建立的表达式右端项的一个变量,比如表达式是F(x,y,z,a,b,c)= ...

不,可能你没理解我的意思,rparam是输入值。是这样的,我是在hypermath中编写的函数,但是他的函数格式跟你所说的F(x,y,z,a,b,c)=(x+y+z-a-b-c) 并不一样,我理解的是iparam所使用的输入值是在DRESP3的卡片中定义的VARTYPE。另外,貌似对输入值的运算是针对里面的单个数据运算的,比如我建立的一个响应是所有单元的von miss应力,现在我需要的是求出这些单元的平均值作为约束条件,然后编制外部响应程序,但是我做出来的结果是求出的是每个单元的平均应力,并不是所有单元的平均应力,请问能否实现我说的功能呢?
回复 不支持

使用道具 举报

发表于 2014-5-1 08:40:51 | 显示全部楼层 来自 上海
lchmecha 发表于 2014-5-1 03:21
不,可能你没理解我的意思,rparam是输入值。是这样的,我是在hypermath中编写的函数,但是他的函数格式 ...

是可以的

输入值就是用VARTYPE定义,若有10个单元,并用10(ID=1,2,3。。。10)个DRESP1分别定义了10个单元的vonMises应力值。
则DRESP3中的VARTYPE那一行,可以这样定义:
VARTYPE=DRESP1, ID = 1,2,3,4,5,6,7,8,9,10

程序里那么你就得求和后平均:
sum = 0.0
for (i=0; i < nparam; i++) do
   sum = sum + rparam[i+1];
end
rresp[1] = sum / nparam;

有模型文件可直接讨论
回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-1 12:21:04 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-5-1 08:40
是可以的

输入值就是用VARTYPE定义,若有10个单元,并用10(ID=1,2,3。。。10)个DRESP1分别定义了10个 ...

模型文件比较大,有几十M,是一个构架,如果按照你的说法的话,那么这个方法可能实现起来有点困难了,因为我要求平均值的单元有上万个,如果像你说的每个单元都要用VARTYPE定义的话,这个工作量就太大了。我原本以为可以将所有单元定义成一个响应,然后编制函数的时候就是对这些个响应里面说有的单元求平均值。不过好像利用c程序实现起来比较容易点吧?
回复 不支持

使用道具 举报

发表于 2014-5-1 21:50:18 | 显示全部楼层 来自 上海
lchmecha 发表于 2014-5-1 12:21
模型文件比较大,有几十M,是一个构架,如果按照你的说法的话,那么这个方法可能实现起来有点困难了,因 ...

是的,MAOSHI工作量太大了。我没有做过这个类似的响应定义。但我想这跟语言没有太大关系,c能实现在,其他的也可以,主要是软件本身吧。

不过事实上,如果你定义好的所有的单元对应的DRESP1,本没有必要用DRESP3求均值,DRESP2有个AVG的FUNCTION类型。
若手动创建DRESP1太累,可以试试HM二次开发创建。。。没试过,我想这个可以的!
回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-4 15:08:04 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-5-1 21:50
是的,MAOSHI工作量太大了。我没有做过这个类似的响应定义。但我想这跟语言没有太大关系,c能实现 ...

恩,其实主要还存在一个问题,就是说像我那样将所有的单元全部定义成为一个DRESP1的响应类型,那么这些数据时怎么样存储的,是像一个数组一样吗?如果是这样的话,是不是可以通过变量nparam来实现我说的计算平均值的方法。这样就相当于是求一个数组的平均值了。
回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-4 20:38:25 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-5-1 21:50
是的,MAOSHI工作量太大了。我没有做过这个类似的响应定义。但我想这跟语言没有太大关系,c能实现 ...

不好意思,一直在问你,主要这个没有例子的,我现在建立的一个dresp3卡片计算的时候出现这个错误,不知道你知道这是什么原因吗?


*** ERROR #  557 ***
  DRESP3       10 is not referenced from within a static SUBCASE.
  This type of response must be specified from within a static SUBCASE.
  This error occurs in DESGLB       52.
回复 不支持

使用道具 举报

发表于 2014-5-4 21:12:03 | 显示全部楼层 来自 上海
lchmecha 发表于 2014-5-4 20:38
不好意思,一直在问你,主要这个没有例子的,我现在建立的一个dresp3卡片计算的时候出现这个错误,不知道 ...

ERROR 指明了DRESP3 #10只能用在静力分析中。
全局约束DESGLB #52中应该包含了 DRESP3 #10, 但是模型中应该有非静力分析的SUBCASE吧。
模型里定义了什么分析啊?
回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-5 05:35:31 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-5-4 21:12
ERROR 指明了DRESP3 #10只能用在静力分析中。
全局约束DESGLB #52中应该包含了 DRESP3 #10, 但是模型中 ...

模型里面就定义了一个静力工况啊,这样吧,我把做的这个例子给你看看吧,你看那里有问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2014-5-5 09:40:55 | 显示全部楼层 来自 上海
本帖最后由 TYNGOD 于 2014-5-5 12:03 编辑
lchmecha 发表于 2014-5-5 05:35
模型里面就定义了一个静力工况啊,这样吧,我把做的这个例子给你看看吧,你看那里有问题 ...

哦,我看明白了错误信息了。它的意思是说,DRESP3 #10应该在SUBCASE内部引用,也就是subcase dependent response. 定义的响应是关于单元应力,但是卡片里并没有指明是哪一个SUBCASE分析计算的结果应力。所以软件也不明白,它就报错了。如果定义在SUBCASE内部,那么就默认是这个SUBCASE的响应。还是得用DESSUB,见附件。你的DRESP3卡片中有一个定义错误,MAXRESP应该等于2(rresp[1], rresp[2]),不是12。有12个输入,我想软件会自己统计的。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2014-5-6 23:10:03 | 显示全部楼层 来自 四川成都
TYNGOD 发表于 2014-5-5 09:40
哦,我看明白了错误信息了。它的意思是说,DRESP3 #10应该在SUBCASE内部引用,也就是subcase dependent re ...

非常感谢你哈,我终于搞懂了,嘿嘿
回复 不支持

使用道具 举报

发表于 2014-12-15 22:02:25 | 显示全部楼层 来自 大连理工大学
定义好所有单元对应的DRESP1后,用DRESP2里的AVG的FUNCTION求均值或是其他的函数功能,好像都不好用。。。用DRESP2求完后的结果输出的仍然是很多很多个响应值,而不是一个值,可能它只是分别对每个单元的DRESP1响应做了运算处理。。。

想问楼主后来怎么解决这个问题的?求教!!
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-5 04:26 , Processed in 0.049787 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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