kakashi 发表于 2024-4-17 15:29 这个QQ群被恶意举报封停了。 你可以加入李老师的 Fortran 初学者群 100125753 |
fcode 发表于 2014-2-24 14:17 新人还能进群交流问题嘛 |
可以结题了~ |
teddy2003 发表于 2014-2-24 14:03 加入我们的QQ群,楼上这些人你都可以看到。 QQ群:2338021 如果代码较多,最好在论坛发帖。 |
fcode 发表于 2014-2-24 13:23 确实是堆栈问题,没注意到有个提示stack overflow,调到最大可以运行了。多谢! 方便留下QQ吗? |
你给出的信息不成系统,不太好确定问题所在。 可能有用的信息: 1. L2不应该为0,你可以单步看看。 2. 可能产生了堆栈溢出。尝试加大堆栈。 3. 在你给出的截图中,794行的 TML2子程序内,ig 的值是多少?是模块中的常量吗? 4. 尝试把一些较大的固定大小局部变量数组,改为可分配数组。例如 listU , listD 5. 尝试出现错误时,点击中断按钮,查看错误发生的位置。 6. 尝试 Debug 单步 |
刚有分析了一下,问题程序应该是如下循环部分。 Nlist2(I)在I=6时才开始大于0,而程序中断时I=5,所以后面必然连锁出错。这是什么原因造成的呢?明明前几步的大循环都没有出错啊。 I = 1 L2 = 0 DO N0=2,Nlev ddl0 = 1.5*dl0(N0) DO N1=1,Nsumbox(N0) I = I+1 IF(Nlist2(I)>0)THEN DO I0=1,Nlist2(I) L2 = L2+1 I1 = list2(L2) xx = boxCen(I1,1)-boxCen(I,1) yy = boxCen(I1,2)-boxCen(I,2) zz = boxCen(I1,3)-boxCen(I,3) IF(ABS(zz)>ddl0)THEN IF(zz>0.) THEN NlistU(I) = NlistU(I)+1 listU(I,NlistU(I)) = I1 ELSE NlistD(I) = NlistD(I)+1 listD(I,NlistD(I)) = I1 END IF ELSE IF(ABS(yy)>ddl0)THEN IF(yy>0.) THEN NlistN(I) = NlistN(I)+1 listN(I,NlistN(I)) = I1 ELSE NlistS(I) = NlistS(I)+1 listS(I,NlistS(I)) = I1 END IF ELSE IF(ABS(xx)>ddl0)THEN IF(xx>0.)THEN NlistE(I) = NlistE(I)+1 listE(I,NlistE(I)) = I1 ELSE NlistW(I) = NlistW(I)+1 listW(I,NlistW(I)) = I1 END IF END IF END IF END DO END IF END DO END DO |
两位大神方便留下QQ号吗?我想方便的话,可以远程协助。 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 10:34