24小时热门版块排行榜    

查看: 1948  |  回复: 19

sinsia

新虫 (小有名气)

引用回帖:
10楼: Originally posted by snoopyzhao at 2011-08-31 15:10:27:
这不是不能用全局变量的理由,呵呵……
你说两个系统下不一致,你的编译器是一样的吗?用的参数是一样的吗?

至于后面的那个问题,要么是内存越界,要么就是你的内存请求太大……

你用动态内存,还是静态 ...

编译器都是一样的,intel fortran 11,参数也完全一样,只是系统环境不同

我的应该是内存请求太大
变量设置的时候没有指明内存动态,所以我觉得应该是静态的吧

多重网格下求解子程序中的网格信息完全不同的,还有就是各层计算得到的余量需要存储调用
所以我没有想到很好的方法去用全局变量
11楼2011-08-31 20:50:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


余泽成(金币+1): 谢谢参与应助! 2011-09-01 15:37:06
引用回帖:
11楼: Originally posted by sinsia at 2011-08-31 20:50:51:
编译器都是一样的,intel fortran 11,参数也完全一样,只是系统环境不同

我的应该是内存请求太大
变量设置的时候没有指明内存动态,所以我觉得应该是静态的吧

多重网格下求解子程序中的网格信息完全不同的 ...

我对你的专业不熟悉,所以帮不了你什么,但我知道,对于大量数据共享、更新要求很高的一般都用全局变量,在 fortran 77 标准中,就是用 common。在 fortran 90 及以后标准中,一般建议用 module……

至于内存申请,能够用动态就动态吧……
12楼2011-08-31 22:30:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sinsia

新虫 (小有名气)

谢谢snoopyzhao
我现在已经把局部变量的内存改为动态的了,之前的程序我是用module就没有这些问题,现在改数据结构主要是因为想写多重网格的原因。

现在还是查不出来是哪儿的问题,头痛ing
13楼2011-08-31 23:06:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
1楼: Originally posted by sinsia at 2011-08-31 09:45:51:
在win7下面用visual studio 2008 和intel fortran 11调试程序,在程序中使用了局部变量(实型数组),每次使用没有赋初值,默认初值为零。在迭代过程中发现数值在没有进入到计算时就自动更新。在linux下就没有这个 ...

我看不懂上面所引的这句话,什么叫“在迭代过程中发现数值在没有进入到计算时就自动更新。”?
14楼2011-09-01 22:14:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sinsia

新虫 (小有名气)

引用回帖:
14楼: Originally posted by snoopyzhao at 2011-09-01 22:14:41:
我看不懂上面所引的这句话,什么叫“在迭代过程中发现数值在没有进入到计算时就自动更新。”?

就是进入调用的子程序,但还没有开始执行循环迭代,在没有用到局部变量的时候,局部变量自动更新
15楼2011-09-02 10:07:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
15楼: Originally posted by sinsia at 2011-09-02 10:07:53:
就是进入调用的子程序,但还没有开始执行循环迭代,在没有用到局部变量的时候,局部变量自动更新

你如何监测到的呢?你看到的局部变量值是什么样的?有没有可能是随机取值……
16楼2011-09-02 10:45:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sinsia

新虫 (小有名气)

引用回帖:
16楼: Originally posted by snoopyzhao at 2011-09-02 10:45:26:
你如何监测到的呢?你看到的局部变量值是什么样的?有没有可能是随机取值……

我是在程序的不同位置打印输出看到的结果。这个应该是没有赋初值的局部变量随机取值,但在linux下是没有这个问题的
17楼2011-09-02 12:08:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


jjdg(金币+1): 感谢参与 2011-09-04 11:01:16
引用回帖:
17楼: Originally posted by sinsia at 2011-09-02 12:08:01:
我是在程序的不同位置打印输出看到的结果。这个应该是没有赋初值的局部变量随机取值,但在linux下是没有这个问题的

如果我没有记错,你前面说过,你用了相同的编译器,用了相同的编译器开关(选项),那么不应该出现不同的结果……

一般迭代运算中,需要继承上一步的中间变量取值,所以,对这类需要继承的变量,加 save 属性,或者在 Fortran 77 中用单独的 save 语句,或者用 save 变量名这种方式……
18楼2011-09-02 13:52:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sinsia

新虫 (小有名气)

引用回帖:
18楼: Originally posted by snoopyzhao at 2011-09-02 13:52:07:
如果我没有记错,你前面说过,你用了相同的编译器,用了相同的编译器开关(选项),那么不应该出现不同的结果……

一般迭代运算中,需要继承上一步的中间变量取值,所以,对这类需要继承的变量,加 save 属性 ...

谢谢
这些中间变量我下次不需要用的,我现在把这些变量全部赋初值。

现在程序发散的问题找到了,边界设置里的一个变量用错了

谢谢所有参与讨论的朋友
19楼2011-09-04 22:52:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

SNZB0405

新虫 (初入文坛)

楼主你好,我现在用intel fortran编写一个多重网格的程序,也跟你遇到了一样的问题,就是变量总是自动更新,导致数组越界,我尝试了给变量赋初值,但是也无济于事;我用的也是win7,VS2012和intel fortran2013。想请教一下楼主,你是怎样解决这个问题的呢?万分感谢。
20楼2014-07-04 09:27:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sinsia 的主题更新
信息提示
请填处理意见