找回密码
 注册
查看: 3016|回复: 19

[讨论]咱们论坛上三维simple中的一处错误!?

[复制链接]
发表于 2006-1-12 17:03:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x

    我用咱们论坛上wangbin上传的三维simple。,今天偶然发现一处可疑之处:DIFLOW子程序中,
ACOF=DIFF
IF(FLOW.LT.1.e-35)RETUN
应该是
IF(FLOW.EQ.1.e-35)RETUN

各位请看看是不是应该这样改,嘻嘻
发表于 2006-1-12 17:47:22 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

不对,原来应该是对的(我没看过这个程序,二维原来看了过,也编译过,但从来没用这个做东西),flow小于一个小数,就是相当为零,而你的正好等于一个小数,对于flow小于一个小数怎么吧?
发表于 2006-1-12 22:23:57 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

我也没看过这个程序.从常识来讲, 同意HARRY的看法.
一般对浮点数, 用相等去比较本身就是很危险的. 即使你输入1, 电脑很可能存成0.999999, 或1.000001 相等条件无法保证.
 楼主| 发表于 2006-1-13 09:09:00 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

o,可是当flow<0的时候呢?,flow<极小数和flow=0能等价嘛?flow<0的时候呢?
发表于 2006-1-13 12:04:43 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

我看了一下原程序,实际你看看二维的就知道怎么回事。我的意见是,这个语句就是指数格式中pe number=0的情况,pe=0,也就是对流为0,这时系数等于扩散量,所以不再需要下边计算,应该返回,二维就是IF(FLOW.LT.0.0)RETUN,不知道谁改成1.e-35,不对。应该改成二维情况
发表于 2006-1-13 12:06:54 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

不好意思,是乘方格式
发表于 2006-1-13 12:10:49 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

下面引用由开心果2006/01/13 09:09am 发表的内容:
o,可是当flow<0的时候呢?,flow<极小数和flow=0能等价嘛?flow<0的时候呢?
如果FLOW可以小于0,那可能是迎风格式吧, 在来流方向有关.
 楼主| 发表于 2006-1-13 12:28:43 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

我的二维程序怎么是IF (FLOW.EQ.0.0) RETURN ? FLOW有可能小于零阿!谢谢anyone和harry!
发表于 2006-1-13 17:39:30 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

呵呵,陶老师的程序是乘方格式,这个应该没错,我虽然没用过,但这种教学程序还是认真读过(我自己认为很认真),哈哈。看看这个原程序
      ACOF=DIFF
      IF(FLOW .EQ.0.0)RETURN
      TEMP=DIFF-ABS(FLOW)*0.1
      ACOF=0.
      IF(TEMP .LE. 0. ) RETURN
      TEMP=TEMP/DIFF
      ACOF=DIFF*TEMP**5
这个return就是一小技巧,不信你把  IF(FLOW .EQ.0.0)RETURN 去掉,一样没问题(没有他和有他算出来的结果一样,有他就可以少算点,就这么简单,郁闷吧)。
开心果,我说过呀,应该改成 IF(FLOW .EQ.0.0)RETURN ,不是那个1.e-35
发表于 2006-1-13 17:44:20 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

我上次发言误导anyone了,不好意思,主要这个2d程序看了有几年了。害人呀。哈哈,老板不在,发言也轻松
发表于 2006-1-13 18:09:06 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

anyone有没有IGG这个软件破解版呀,现在有个代码,非得要读这个东东的网格,想调试一下,没网格,郁闷
发表于 2006-1-14 00:59:04 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

不客气. 我手上没程序只能猜.
如果是这样, 用|FLOW|<1.e-35 或|FLOW|/DIFF<1E-10 也许能过滤掉更多没用的计算.当然比较本身也花时间, 不是那么好平衡. 其实统共也没几句, 全算也花不了多少时间. CFD求系数时用时间并不是太多, 解方程组的时候的确应该能省就省.

IGG我没有, 一般我也不收集这些软件. 找不到软件也许可以找文件格式说明自己生成一个. 如果是源代码, 把输入部分改改用别的网个了.
发表于 2006-1-14 13:46:32 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

是对的
 楼主| 发表于 2006-1-17 13:14:50 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

对不起,前几天回家了。谢谢大家。但是有点迷糊了,三维程序是这样的:
ACOF=DIFF
IF(FLOW.LT. 1.E-35) RETURN
TEMP=DIFF-ABS(FLOW)*0.1
ACOF=0.
IF(TEMP.LE.0.) TRTRUN
TRMP=TEMP/DIFF
ACOF=DIFF*TEMP**5
RETURN
END
我是觉得第一个IF语句应该改为IF(FLOW.EQ.0) RETURN或者IF(ABS(FLOW).LT.1.0E-35)RETURN
要不然当FLOW<0的时候,ACOF=DIFF,不对了
另外不知道CFDNHT大侠说什么是对的?原来的程序是对的?
发表于 2006-1-18 13:50:04 | 显示全部楼层

[讨论]咱们论坛上三维simple中的一处错误!?

我们计算时一般认为当一个数小于1e-35就近似为0了,特别是当对浮点数的比较时。而且在fortran中对浮点数慎用。eq。,很容易出问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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