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

[H. 有限元编程] uniUnit - 统一单位系统的程序包

[复制链接]
发表于 2014-11-27 18:39:37 | 显示全部楼层 |阅读模式 来自 北美地区
  1. 有限元和类似计算方法往往是无量纲的,而实际的计算是需要一个量纲的,因此计算人员必须保证模型中量的量纲是一致的。这是一个很繁杂的工作,大部分计算人员都或多或少的在这个问题上犯过错误。因此,在这里我写了一个程序包来彻底的解决这个问题。

  2. 这个程序包的想法很简单。首先,你需要告诉我你想要的量纲系统。其次,你需要告诉我一个正确的量。然后一切就搞定了,程序包会返回在你指定的量纲系统中量的值是多少。

  3. 这里是几个例子:

  4. from uniunit import *
  5. conv_dict = {'kg':'g','m':'mm','s':'s',
  6.                         'A':'mA','K':'K','mol':'mol','cd':'cd'}
  7. myunit = uniUnit(conv_dict)

  8. myunit.to_unit(100 * kg)
  9. # 100000.0 [g]
  10. 哈,这样的功能有谁会需要,太简单了!好吧,那下面这个例子怎么样呢?

  11. myunit.to_unit(J)
  12. # 1000000000.0 [g.mm2/s2]

  13. myunit.to_unit(W/m/m)
  14. # 1000.0 [g/mm0.s3]

  15. W/m/m == kg/s/s/s
  16. # True
  17. 或者,如果你是个纳米科学专家,你可能喜欢用纳米为单位的量。

  18. conv_dict = {'kg':'ug','m':'nm','s':'ps',
  19.                         'A':'mA','K':'K','mol':'mol','cd':'cd'}
  20. myunit1 = uniUnit(conv_dict)

  21. myunit1.to_unit(2E11*Pa)
  22. # 2e-13 [ug/nm.ps2]
  23. 还是很简单吗?那如果不是国际单位制呢?试试告诉我1 W/m/m在pound, inch, min的量纲系统中是多少?

  24. conv_dict = {'kg':'pound','m':'inch','s':'min'}
  25. myunit2 = uniUnit(conv_dict)

  26. myunit2.to_unit(W/m/m)
  27. # 476198.486319 [pound/inch0.min3]

  28. 1*W/m/m - 476198.486319*pound/min**3
  29. #  7.04547531427e-13 [W/m2]
  30. 备注:

  31. 你不需要提供整个量纲对应表,只需要提供你需要用到的那些;
  32. 但是,你必须提供你需要用到的所有量纲的对应表,因为对应表是没有默认值的;
  33. 你还可以用自定义的量纲系统。这里是一个例子:
  34. Long = unum.Unum.unit('Long',1000*km)
  35. Flash = unum.Unum.unit('Flash',1*ms)

  36. conv_dict = {'m':'Long','s':'Flash'}

  37. myunit3 = uniUnit(conv_dict)

  38. myunit3.to_unit(m)
  39. # 1e-06 [Long]

  40. myunit3.to_unit(9.8 * m/s**2)
  41. # 9.8e-12 [Long/Flash2]
  42. 在你开始之前,下面这些内容可能你会感兴趣:

  43. 1 [T] 不是 1000 [kg], 而是 1 特斯拉;
  44. in 是Python的保留字,不能用来作为单位。

复制代码
程序包还在设计,还没有Release的版本,有人有兴趣吗?欢迎对程序的功能提意见和建议!

发表于 2014-11-30 20:15:26 | 显示全部楼层 来自 上海
Simdroid开发平台
http://stackoverflow.com/questio ... onversion-in-python
http://home.scarlet.be/be052320/Unum.html
请问lz能够说说上面的网页提供的信息或解决方案存在哪些弊端吗?
回复 不支持

使用道具 举报

发表于 2014-11-30 22:12:29 | 显示全部楼层 来自 江苏苏州
我不编程,但从一个FEM user 的经历来谈一下用此功能的感受。如果做大工程项目,结构大和复杂,能调换单位是好事,但是不确定的千万别乱调,因为这里涉及到了前处理和后处理,很容易疏忽而犯错。(一般小的research project 用不着调来调去)

SAP2000 (也包括同一系列的ETABS和SAFE)中可以随时把单位进行调换,是我唯一觉得可以放心调换的软件。
ANSYS 和ADINA 好像没这个功能。老版本LUSAS 好像也没有这个转换。
在OVE ARUP自己开发的OASYS GSA中,把单位分为两种,把计算跨度 ,力等列为large scale, 而把deflection 列为small scale,程序开始时可以设定large 、small scales 分别为不同的单位。我对GSA这种处理方式不喜欢。
回复 不支持

使用道具 举报

 楼主| 发表于 2014-12-8 12:20:58 | 显示全部楼层 来自 摩尔多瓦
pasuka 发表于 2014-11-30 20:15
http://stackoverflow.com/questions/2125076/unit-conversion-in-python
http://home.scarlet.be/be052320 ...

unum 没有提供相关功能,而且最近基本上处于开发停滞阶段,老的PR现在都没有合并。
回复 不支持

使用道具 举报

发表于 2014-12-8 18:23:33 | 显示全部楼层 来自 上海
mayaview 发表于 2014-12-8 12:20
unum 没有提供相关功能,而且最近基本上处于开发停滞阶段,老的PR现在都没有合并。
...

个人持保留意见,当然lz若是执意想尝试还是应该鼓励的
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 12:04 , Processed in 0.030901 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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