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

[其他] Patran读取大容量op2文件的尝试

[复制链接]
发表于 2012-9-28 18:15:43 | 显示全部楼层 |阅读模式 来自 大连理工大学
      以前做应力恢复的时候碰到过生成的op2文件超大,读入到patran的时候,patran自动退出的情况,当时问了蓝博士有两种办法:1、表面建膜单元,只恢复膜单元的应力结果。2、分段应力恢复。我当时琢磨表面建膜单元,可能得自己手动在有限元实体表面建立膜单元,感觉实现起来比较麻烦,就放弃了,改用分段应力恢复的办法解决的。

      近期又碰到这个问题,我就想能不能一次性恢复全部的应力结果,而不用分段进行了呢?自己进行了一下尝试。

      重复了以前的步骤,用patran 2005读取20.1G的op2结果文件,patran又自动退出了,我发现patran读入到内存和硬盘缓存的容量达到1.9G多的时候,就会出错退出。联想到在32位windows系统下,程序最多只能占用2G内存的规定,我估计patran需要把op2结果都调到内存或硬盘缓存中去,达到32位windows的2G的上限就会退出了。

      看来32位的windows系统是不行了,我把操作系统换成了64位的win7,patran也与时俱进换成了64位的patran 2012版。同时又用谷歌查找了一下patran关于内存使用的资料,在MSC网站上的帮助里就有(http://www.mscsoftware.com/training_videos/patran/Reverb_help/index.html#page/Installation%20and%20Operations%20Guide/user_environ.05.8.html)。帮助里的Patran Database Caching and Swapping部分介绍了patran需要把用户的数据调入到内存或硬盘缓存中,而且patran还有一个cache机制,把用户经常使用的资料缓存到cache里,以后用户用到这部分数据时会得到快速的响应。我估计patran的cache默认也是写入到内存或硬盘缓存中的。如此看来,我有20.1G的op2数据,假设patran把这20.1G的数据都缓存到它的cache里,那总共就是40.2G的数据读取量。

      估计出来文件大小,那就针对性的做准备了。我的电脑内存4G,然后我把win7的硬盘缓存设到50G,系统总共虚拟内存是54G,足够patran使用了。实际一试,patran读进来op2文件花了十几分钟,然后我点击保存按钮,将结果存到.db文件里,保存过程又花了20多分钟。顺利地把20.1G的op2文件用patran读了进来。

      受此鼓舞,我大胆地把应力恢复从原来每隔5CA改为每隔1CA,这样生成的op2文件是原来的5倍,有99.9G之多,我又如法炮制,将硬盘缓存调到230G,但这次没成功,在patran读取op2文件40多分钟后,报sql error。我又增大硬盘缓存到330G,还是不行。

      失望之余,我想了想,20.1G的文件和99.9G的文件有什么区别呢,是不是又碰到什么限制了呢?然后我想起之前查找32位和64位windows对内存支持大小的资料时,看到过win7支持的paged pool最大是128G(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778%28v=vs.85%29.aspx),这会不会是说win7的硬盘缓存最大不能超过128G,再大就没用了呢?如果这样的话,我的电脑总的虚拟内存是128+4=132G,对于99.9G的op2文件恐怕不够用啊?有没有别的办法了呢。

      又回想起来看msc网站的帮助中提到过patran关于内存使用有两个环境变量PBD_C_CACHE_SIZE和PDB_C_SWAP_DIR(http://www.mscsoftware.com/training_videos/patran/Reverb_help/index.html#page/Installation%20and%20Operations%20Guide/user_environ.05.2.html)。当时我还琢磨过这两个变量能不能帮上点忙。我理解这两个环境变量是这样的作用:前文讲到patran有个cache机制,把用户常用到的数据缓存到cache中,例如在patran 2005中默认cache大小是750M,默认存储在系统的虚拟内存(物理内存+硬盘缓存)中。PBD_C_CACHE_SIZE变量是让用户可以根据自己电脑的具体情况自由调节cache的大小。当patran要缓存的数据小于设定值(比如750M)时,这部分数据还是存在windows系统的虚拟内存中的。如patran要缓存的数据超过750M时,超过的部分就不存在windows虚拟内存中了,而是放在PDB_C_SWAP_DIR变量指定的路径下。这样patran的cache文件就不会过多地占用windows系统的虚拟内存资源了。

      想到这些后,我就想得把patran缓存的cache部分得挪走,以减少对windows虚拟内存的需求。我在win7里设了以上两个系统变量,PBD_C_CACHE_SIZE设为2G(即patran只把2G以内的数据留在windows虚拟内存中),PDB_C_SWAP_DIR设在了空间大的G盘上的一个临时目录里(即patran把2G以上的缓存数据都存在这个目录里)。然后又把win7的硬盘缓存设为120G(以小于128G)。

      然后又重新读入99.9G的op2文件,终于顺利地读进来并保存成.db文件了,只是整个过程耗时相当长,读进来op2文件花了3小时,保存成.db文件又花了3小时。为什么耗时这么久,我理解是因为我的电脑内存只有4G,处理这么大规模的数据几乎全靠把硬盘当缓存来撑着了,硬盘速度比内存慢得多,时间久也再所难免了。

      总结:需要用到64位windows、64位patran、硬盘缓存要设得足够大,但不能超过128G、利用好patran的PBD_C_CACHE_SIZE和PDB_C_SWAP_DIR这两个环境变量把patran的cache文件从系统的虚拟内存中转移出来。

      以上就是我连蒙带猜误打误撞来解决问题的过程,错误之处肯定不少,大家就借鉴个思路,以后遇到类似的问题自己试试吧。

      一点题外话:win7的专业版、企业版、旗舰版都能支持最大192G的物理内存,支持最大128G的paged pool(我理解是硬盘缓存),那win7总共的虚拟内存最大就是192+128=320G。大家的计算结果超过这个规模的话只能换其他的操作系统试试了,如linux或unix等。

评分

1

查看全部评分

发表于 2012-9-29 10:36:29 | 显示全部楼层 来自 重庆沙坪坝区
Simdroid开发平台
谢谢tomas!
回复 不支持

使用道具 举报

发表于 2012-10-30 16:15:19 | 显示全部楼层 来自 湖南长沙
学习,尝试。
回复 不支持

使用道具 举报

发表于 2012-11-7 21:14:56 | 显示全部楼层 来自 重庆
感谢tomas
回复 不支持

使用道具 举报

发表于 2013-1-22 20:07:14 | 显示全部楼层 来自 上海
学习了!
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 19:24 , Processed in 0.044936 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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