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

[资料共享] LS-DYNA模态分析的一点经验

[复制链接]
发表于 2011-7-23 02:18:24 | 显示全部楼层 |阅读模式 来自 美国
本帖最后由 daphne_wj 于 2011-7-23 03:34 编辑

最近做模态分析,求模型自振频率和模态。论坛上也没搜到多少有用的资料,就自己试验了下,有一点经验分享。我用的是971r5.1
有两个隐式控制关键字就可以了
*CONTROL_IMPLICIT_EIGENVALUE
*CONTROL_IMPLICIT_GENERAL


1.尽量用双精度:我有几次用单精度得不出结果,双精度就可行。

2.最好加边界条件:不加边界条件有时也能得出结果,比如我计算的汽车模型。

3.提取模态数量的控制不太灵活:

提取模态数量理论手册有说明

并不是按照使用手册规定的那样方便:

这个花了我不少时间才得出我想要观察的频率范围。
若要得到6Hz以上的30个频率,可以设定*CONTROL_IMPLICIT_EIGENVALUE选项卡中neig=30;lflag=1;  lftend=6,其他默认,

观察结果:
用LSPP读取d3eigv文件察看振型动画。
直接打开eigout读取频率,形式如下:

                             |------ frequency -----|
        MODE    EIGENVALUE       RADIANS        CYCLES        PERIOD
           1   5.170018E+01   7.190284E+00   1.144369E+00   8.738438E-01
           2   6.390315E+01   7.993944E+00   1.272276E+00   7.859931E-01
           3   7.383460E+01   8.592706E+00   1.367572E+00   7.312231E-01
           4   1.486682E+02   1.219296E+01   1.940569E+00   5.153127E-01
           5   1.562357E+02   1.249943E+01   1.989346E+00   5.026778E-01
           6   2.430167E+02   1.558899E+01   2.481065E+00   4.030527E-01
           7   2.504208E+02   1.582469E+01   2.518577E+00   3.970495E-01
           8   2.504208E+02   1.582469E+01   2.518577E+00   3.970495E-01
其中RADIANS是圆频率,CYCLES是Hz单位的频率,PERIOD是周期。

本帖子中包含更多资源

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

×

评分

2

查看全部评分

发表于 2011-7-23 12:37:28 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
总结的很好。不过关于“2.最好加边界条件:不加边界条件有时也能得出结果,比如我计算的汽车模型。”我有些疑问。我认为模态分析有自由模态和约束状态下的模态分析,边界条件应该根据实际需要添加,并不能随便加不加吧。
回复 不支持

使用道具 举报

发表于 2011-7-24 01:09:48 | 显示全部楼层 来自 湖南长沙
同意lojade 兄观点,边界条件不能乱加的。至于单精度和双精度的差别这个就不知道了!
回复 不支持

使用道具 举报

发表于 2011-7-24 09:09:01 | 显示全部楼层 来自 陕西西安
搜索到的,参考一下,应该类似
单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念:

当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。

基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释:

简单的解释方法:

你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。

深入的解释方法:

让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖:

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


Public Sub floatTest()
Dim dblVar As Single

dblVar = 5.731 / 8
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

End Sub

Public Sub dblOutput(ByVal dblVar As Single)
Dim bytVar(3) As Byte
Dim i As Integer, j As Integer
Dim strVar As String

CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4
strVar = dblVar & ": "
For i = 3 To 0 Step -1
For j = 7 To 0 Step -1
strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j
Next j
strVar = strVar & " "
Next i
Debug.Print strVar

End Sub
运行后我们得到输出结果(输出格式为高位左,低位右):

.716375: 00111111 00110111 01100100 01011010
1.43275: 00111111 10110111 01100100 01011010
2.8655: 01000000 00110111 01100100 01011010
5.731: 01000000 10110111 01100100 01011010
11.462: 01000001 00110111 01100100 01011010
22.924: 01000001 10110111 01100100 01011010
这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们的二进制存储惊人地相似,我们看到红色标记部分,每次都是加1,事实上,单精度数据类型使用从高位开始第1位作为正负标记位(绿色),第2位到第9位,是一个跨字节的有符号字节类型数据,这个数值决定了小数点移动的方向和位数(红色),第10位到32位保存一个整数(蓝色)在存储过程中,电脑首先把输入的值不断移位(乘除2)直到这个数的整数部分占用了全部24位的整数位,然后把移动的位数写入浮点部分(红色),而移位后的结果写入整数部分(蓝色和绿色),小数部分则舍弃。求值的时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分的整数来进行移位(乘除2的次方),最终才是我们得到的单精度数值。双精度数值也是同样原理,只是位数更多而已。

通过解剖单精度数值的二进制存储格式,我们可以清楚看到,实际上单精度/双精度的存储,都要通过乘法和除法,其中必有舍入,如果恰好你的数值在除法中被舍入了,那么你赋的初值就很可能与你最终存储的值不完全相同,其中的微小差异,并不与单精度/双精度的设计目标相违背。

当我们在数据库中或者VBA代码中使用一个单精度/双精度数值的时候,也许你从界面上看不到区别,但是在实际的存储中,这个差别却真真切切地就在那里,当你对其进行相等比较的时候,系统只是简单地作二进制的比较,界面上无法体现的微小差异,在二进制比较面前却无处遁形,于是,你的等于比较返回了一个意料之外的False。



单精度比双精度主要是计算是求解的精度不一样,双精度要比单精度计算的更准确(尾数取的更多,误差更小)但是双精度的计算时间会更长,在一般的计算中,这些误差都是可以不要的,所以没有特殊的需求一般用单精度

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-24 09:48:37 | 显示全部楼层 来自 美国
2# lojade
有道理,我想如果结构是自平衡体系(我的猜想),比如汽车,可能就不需要加边界条件,我试着在轮胎与地面接触的节点加上约束,与无约束情况下比,最初50阶模态毫无差别。但是桥梁结构没有边界条件,算不出模态,不同边界下的模态有差别,但是我关心的几个最低阶的弯曲模态非常接近。我的边界条件加法就是三个方向的平移和转动。
我想可能是模态之和M和k有关,如果k不同约束下变化不大的话,约束对模态的影响就不大。
回复 不支持

使用道具 举报

发表于 2011-9-8 16:38:55 | 显示全部楼层 来自 北京
学习:):):)
回复 不支持

使用道具 举报

发表于 2011-12-1 10:07:04 | 显示全部楼层 来自 天津
请问楼主的单精度和双精度是如何控制的?
回复 不支持

使用道具 举报

发表于 2011-12-1 14:59:22 | 显示全部楼层 来自 河北秦皇岛
CYCLES是周期吧。
  EIGENVALUE  是频率吧。感觉是。顺便问一下,模型长度单位是mm,时间是s。得出的频率单位是hz吗?
回复 不支持

使用道具 举报

发表于 2011-12-1 17:23:32 | 显示全部楼层 来自 天津
张晓娜06 发表于 2011-12-1 14:59
CYCLES是周期吧。
  EIGENVALUE  是频率吧。感觉是。顺便问一下,模型长度单位是mm,时间是s。得出的频率单 ...

EIGENVALUE是特征值,不是频率,如果时间的单位是S,那么频率的单位就是HZ,物理公式:f=1/T
回复 不支持

使用道具 举报

发表于 2011-12-14 12:04:00 | 显示全部楼层 来自 湖南湘潭
求算列,楼主有相关的k文件不?让我学习学习一下
回复 不支持

使用道具 举报

发表于 2011-12-14 14:44:33 | 显示全部楼层 来自 上海
用DYNA分析模态?喝多了吧
回复 不支持

使用道具 举报

发表于 2011-12-14 19:07:31 | 显示全部楼层 来自 上海闵行区
不加约束算出的模态前6阶是刚体模态,频率接近0,如果约束对K影响很小则后面的自由模态与约束模态频率接近。另外,还没见到过有人用dyna算模态的!
回复 不支持

使用道具 举报

发表于 2011-12-14 19:09:44 | 显示全部楼层 来自 辽宁锦州
支持姐姐,没用ls-dyna做过模态,倒是用optistruct和abaqus做过点!
回复 不支持

使用道具 举报

发表于 2012-5-21 18:26:15 | 显示全部楼层 来自 大连理工大学北山B区
学习了,呵呵

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2012-5-30 09:12:30 | 显示全部楼层 来自 大连理工大学
好像是用dyna算模态的不是很多,模态分析多用的是隐式分析,而dyna比较擅长的是显式分析,可能是这个原因用dyna算模态的不是非常多
回复 不支持

使用道具 举报

发表于 2012-7-25 14:47:51 | 显示全部楼层 来自 江苏南京
970的是不是内存分配不足,怎么计算不了模态呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2012-7-26 13:01:53 | 显示全部楼层 来自 上海
Zray 发表于 2012-7-25 14:47
970的是不是内存分配不足,怎么计算不了模态呢?

什么出错信息,可否贴上来。
仔细检查下k文件。
回复 不支持

使用道具 举报

发表于 2012-8-22 14:58:31 | 显示全部楼层 来自 浙江宁波
感谢楼主分享!
回复 不支持

使用道具 举报

发表于 2012-10-14 21:53:25 | 显示全部楼层 来自 上海
daphne_wj 发表于 2012-7-26 13:01
什么出错信息,可否贴上来。
仔细检查下k文件。

ANSYS 版本的问题,12.0就没有这个问题
回复 不支持

使用道具 举报

发表于 2012-10-22 16:43:42 | 显示全部楼层 来自 浙江宁波
LS-DYNA950版本就把隐式计算加入进去了,的确可以进行模态分析。不过关键字比较少,貌似一般就9个关键字吧。进行模态分析,只要设置Control-implicit-general和Control-implicit-EIGENVALUE.IMFLAG=1,并给NEIG一非零值,以激活隐式方法,程序默认搜寻最小的NEIG特征值。如果给定了非零圆心频率分布,程序将会自动找到与CENTER最近的NEIG特征值。

评分

1

查看全部评分

回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 07:18 , Processed in 0.054637 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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