24小时热门版块排行榜    

查看: 1355  |  回复: 10

xiaobear20

金虫 (小有名气)

(⊙o⊙)…

[求助] FORTRAN新手 求助主程序循环问题

我现贴出主程序部分:
     PROGRAM MAIN  
        USE SAME
        IMPLICIT NONE            

       N=120
      M=241
      ITMAX=60  
     ITER=0            
     CALL INPUT
     CALL GRID      
     DO I=1,M                        !!!!!!初始条件!!!!!!!!!!
          DO J=2,N-1                    
          W(I,J)=1-EXP(-ETA(J))
          ENDDO                        
     ENDDO
60 ITER=ITER+1
     SELECT CASE(ITER-ITMAX)
     CASE(:-1)        !  <= -1   整数
   GO TO 70
    CASE(0)          !   =0
    WRITE(6,2500)
    GO TO 70
    CASE(1         !   >=1
    WRITE(6,2600)
    GO TO 90
    END SELECT
70  DO I=1,M
         DO J=2,N-1
         WOLD(I,J)=W(I,J)      
        ENDDO
     ENDDO            
     CALL EDDY
     CALL CMOM                              
     CALL SOLV
     DO I=2,M
          DO J=2,N-1
           CONVER(I,J)=ABS(1-(WOLD(I,J)/W(I,J)))  
          ENDDO
      ENDDO
      MX=MAXVAL(CONVER)   !选取误差中的最大值
      IF(MX.LE.EPS)THEN    !     <=0.0001 !收敛判断  EPS=0.0001   误差 CONVER
      GO TO  90   
      ELSE
      GOTO 60
      ENDIF                                                                              
90 CALL OUTPUT
      END PROGRAM
程序主要过程如下是,(计算的是一个二维网格点上的速度,即二维数组),先给迭代的矩阵赋初值,继而进行第一次迭代,每次迭代完后,把此次结果与上一次的结果进行比较,逐点比较,选出最大误差,再与收敛条件ESP比较,如满足条件则输出结果,如不满足,再返回迭代,直到满足收敛条件为止,(其中也对迭代的次数进行了判断)
我的问题如下:不知道怎么回事,程序只进行了一次计算就输出了结果,没有进行第二次,还有误差判断CONVER(I,J)总是为0,我把子程序的结果也输出看了一下,各个子程序还是运行了一次。我就不知道问题在哪了。是结构问题还是别的,求大神指道,分少别嫌弃啊,急等啊
子程序
CALL EDDY
     CALL CMOM                              
     CALL SOLV
在子程序EDDY中都用到了初始值,CMOM是矩阵系数的计算,SOLV是最后的结果计算,谢谢
回复此楼
一切还好
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty: 金币+1, 欢迎常来 2012-04-07 14:48:19
这个程序没有办法改,比如你的 W(I,J) 的值有更新吗?在你的程序中,你的 WOLD 与 W 一直都是一样的,那么 CONVER 当然总是 0 了。因此,只迭代一次是很正常的。如果在 WOLD 之后,还有 W 更新,那么情况可能会不一样。但这个没有办法看出来,因为你的所有 subroutine 的返回值是啥都看不出来……

另外,你似乎喜欢用全局变量作为 subroutine 的参数和返回值,很多时候,这个习惯并不好,呵呵……
2楼2012-04-07 12:55:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaobear20

金虫 (小有名气)

(⊙o⊙)…

引用回帖:
2楼: Originally posted by snoopyzhao at 2012-04-07 12:55:00:
这个程序没有办法改,比如你的 W(I,J) 的值有更新吗?在你的程序中,你的 WOLD 与 W 一直都是一样的,那么 CONVER 当然总是 0 了。因此,只迭代一次是很正常的。如果在 WOLD 之后,还有 W 更新,那么情况可能会不 ...

对,如果W值改变了的话,这样是把前一次的W值赋给WOLD啊,这样就可以看做是与前一次值进行比较啊,那这个全局变量的问题有怎么改了,我是新手 呵呵
一切还好
3楼2012-04-07 13:35:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
3楼: Originally posted by xiaobear20 at 2012-04-07 13:35:37:
对,如果W值改变了的话,这样是把前一次的W值赋给WOLD啊,这样就可以看做是与前一次值进行比较啊,那这个全局变量的问题有怎么改了,我是新手 呵呵

你的 W 值在哪里改变的呢?在 WOLD 之前,还是之后?反正你给的主程序中看不出来……

用全局变量似乎也没有啥问题,如果可能尽量不要用全局变量(这只是我个人的看法)……
4楼2012-04-07 14:37:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaobear20

金虫 (小有名气)

(⊙o⊙)…

引用回帖:
4楼: Originally posted by snoopyzhao at 2012-04-07 14:37:59:
你的 W 值在哪里改变的呢?在 WOLD 之前,还是之后?反正你给的主程序中看不出来……

用全局变量似乎也没有啥问题,如果可能尽量不要用全局变量(这只是我个人的看法)……

是在WOLD之后改变的,就在子程序 EDDY  CMOM  SOLV后啊  在SOLV后 用W值与WOLD比较,即W与前一次W值比较
一切还好
5楼2012-04-07 15:34:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

引用回帖:
5楼: Originally posted by xiaobear20 at 2012-04-07 15:34:19:
是在WOLD之后改变的,就在子程序 EDDY  CMOM  SOLV后啊  在SOLV后 用W值与WOLD比较,即W与前一次W值比较

w 到底在哪里改变的?

从你的描述来看应该是在 wold 之前,因为 wold 之后,w 和 wold 就是相同的了,所以就就会出问题了。

你可以把 wold 那个循环放在 eddy, cmom solv 之前试试看……
6楼2012-04-07 16:28:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
xiaobear20: 金币+50, 有帮助, 谢谢 2012-04-10 18:57:32
哦,不好意思,看错了。如果在 eddy, comom, solv 之后变化的应该没有问题啊……

你把 w 和 wold 打印出来看看吧……
7楼2012-04-07 16:30:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

如果不是保密的,以及巨大的程序,最好放个可以编译执行的源码上来吧,否则太费劲了……
8楼2012-04-07 16:32:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fys131415

金虫 (正式写手)

请问你解决了吗,我也是在调用子程序的时候,虽然子程序有做运算,但感觉最后的值没返回去。我也是每次循环的结果都一样,不知问题在哪里。
9楼2012-06-28 15:51:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fys131415

金虫 (正式写手)

希望可以交流一下,
10楼2012-06-28 15:52:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xiaobear20 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[找工作] 杭电、天津科技、青农和宁波工程学院如何选? +12 味道很好啊 2024-06-13 23/1150 2024-06-17 22:16 by 半简体
[考博] 这个博士要读吗 +9 Sea Breeze 2024-06-16 17/850 2024-06-17 19:50 by zeolitess
[论文投稿] 论文已接收,但发现修改稿传的是旧版该怎么办? +3 zsq54321 2024-06-15 6/300 2024-06-17 19:45 by wjykycg
[论文投稿] 审稿问题:为什么荧光激发波长和紫外吸收波长差的大? 10+5 sdawege 2024-06-14 10/500 2024-06-17 18:54 by HH-探针
[找工作] 初始合伙人来啦!(生物试剂耗材标准品) +11 欢快的小科研人 2024-06-15 21/1050 2024-06-17 18:47 by 欢快的小科研人
[高分子] 寻找聚酯反应釜 +3 茕茕恭煮 2024-06-15 4/200 2024-06-17 18:18 by sunliyan123
[考博] 2025考博 +7 自强不息a?a 2024-06-15 11/550 2024-06-17 18:13 by 小木雄子
[基金申请] 面青地会评时间 +8 tanjydd 2024-06-15 8/400 2024-06-17 17:08 by 小龙虾2008
[有机交流] 苯酚和炔醇反应,mitsunobu反应 5+3 TONGMEIMEI 2024-06-12 9/450 2024-06-17 15:00 by dschong
[教师之家] 请问事业编制和年薪制冲突吗? +10 ZHONGWU_U 2024-06-14 10/500 2024-06-17 14:44 by 周周520
[催化] 镍负载氧化铝的保存问题 8+3 lwn0130 2024-06-15 4/200 2024-06-17 10:48 by adaihao
[硕博家园] 博士毕业高校和就业的相关问题 +6 SCITOPPP 2024-06-14 10/500 2024-06-17 10:08 by SCITOPPP
[论文投稿] 投稿被一个审稿人恶意评审了怎么样? +5 1chen 2024-06-14 7/350 2024-06-15 23:15 by xy66xy
[基金申请] BO4的YQ答辩通知发布了吗? +6 博学笃行 2024-06-11 6/300 2024-06-15 16:04 by 悲催科研狗
[基金申请] 为什么我的博后基金还在流动站审核中?不会是学院给我卡了吧? +14 王凯12 2024-06-13 26/1300 2024-06-15 15:22 by 好人与坏人
[基金申请] 博后基金,以往的结果点不开,怎么回事呢?最后一次机会了,两次都没中前面。 +7 kyukitu 2024-06-14 13/650 2024-06-15 06:46 by 我是王小帅
[基金申请] 博士后基金需要结题吗? +8 zhouchuck 2024-06-13 8/400 2024-06-14 17:27 by liuyupu132
[论文投稿] 文章proof要求使用机构的邮箱 5+3 不可不信缘 2024-06-11 11/550 2024-06-14 07:00 by 3001160025
[论文投稿] with editor日期变更 +3 慎独的小花卷 2024-06-12 8/400 2024-06-13 11:00 by 慎独的小花卷
[基金申请] 博后特助这周出结果吗?往年都是啥时候啊? +13 jsqy 2024-06-12 17/850 2024-06-12 19:55 by Lynn212
信息提示
请填处理意见