24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1760  |  回复: 12

霹雳旋风

荣誉版主 (著名写手)

[求助] 求高人帮忙看一下我这个Fortran程序的错误出在哪里?

程序代码如下:


    program ganeiliwucha
                implicit none
        External FS
        Integer I,L,N
        Dimension X(2),Y(2),C(2)
        Double Precision X, Y, EPS,C
        open (2000, file='test.dat', status='old' )
        Data X/0.00,0.01/
           EPS=1.0E-06
        CALL DSNSE(2,EPS, X, Y, FS, L)
        IF(L.GT.0)then
       C(1)=cos(X(2))/sin(X(1)+X(2))*tan(20.0/180*3.14)-1.0   ! AC杆的内力误差
    C(2)=cos(X(1))/sin(X(1)+X(2))*sin(20.0/180*3.14)-1.0   ! BC杆的内力误差
        do I=1,2
    write(2000,*) X(I)
        end do
    end IF
        close(2000)
        end

        SUBROUTINE DSNSE(N,EPS,X,Y,FS,L)
        DIMENSION X(N),Y(N)
        DOUBLE PRECISION X,Y,F,D,S
        L=500
5        CALL FS(X,N,F,Y)
        IF (F.GE.EPS) THEN
          L=L-1
          IF (L.EQ.0) RETURN
          D=0.0
          DO 20 J=1,N
20          D=D+Y(J)*Y(J)
          IF (D+1.0.EQ.1.0) THEN
            L=-1
            RETURN
          END IF
          S=F/D
          DO 30 I=1,N
30          X(I)=X(I)-S*Y(I)
          GOTO 5
        END IF
        RETURN
        END

    SUBROUTINE FS(X, N, F, Y)
        DIMENSION X(N), Y(N)
        Double precision X,Y,F,F1,F2,DF1,DF2,A,B
          A=20.0/180*3.14                           
          K=0.5
          F1=X(1)+X(2)-cos(A)
          F2=sin(X(1))*cos(A)*(1+K*cotan(A))+SIN(X(2))*(1.0-K/sin(A))-cos(A)
          F=F1*F1+F2*F2
          DF1=1.0
          DF2=cos(X(1))*cos(A)*(1+K*cotan(A))
          Y(1)=2.0*(F1*DF1+F2*DF2)
          DF1=1.0
          DF2=COS(X(2))*(1.0-K/sin(A))
          Y(2)=2.0*(F1*DF1+F2*DF2)
    RETURN
        END

  程序编译通过,但是出现计算数据无法输出的问题,请高手帮忙看一下。不胜感激。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有2个 )

霹雳旋风

荣誉版主 (著名写手)

引用回帖:
: Originally posted by ygl820 at 2012-02-21 10:31:22:
运行后,test.dat生成了没有。

运行后,生成了test.dat
8楼2012-02-22 13:05:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

霹雳旋风

荣誉版主 (著名写手)

引用回帖:
: Originally posted by snoopyzhao at 2012-02-23 13:54:41:
这个程序用 gfortran 没有办法编译,显示 cotan 未定义……

你这个 test.dat 是空的很正常啊,说明 L .LE. 0 啊,呵呵……

谢谢楼上,
程序中的cotan() 的含义是求角度的余切值呀。请高人指点哦。
10楼2012-02-23 19:37:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

夕阳西下

金虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
jjdg(金币+1): 感谢应助 2012-02-20 01:39:45
open (2000, file='test.dat', status='old' )
write(2000,*) X(I)
write 2000这样写是不是有问题呢?
2楼2012-02-19 09:17:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

haizhfly

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
jjdg(金币+1): 感谢应助 2012-02-20 01:39:55
open (2000, file='test.dat', status='old' )
write(2000,*) X(I)

status='old'  要求输出文本 test.dat是已经存在的文件,删去这一文件状态控制语句试一下看,个人觉得最大问题在这里
3楼2012-02-19 11:21:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

霹雳旋风

荣誉版主 (著名写手)

引用回帖:
: Originally posted by haizhfly at 2012-02-19 11:21:31:
open (2000, file='test.dat', status='old' )
write(2000,*) X(I)

status='old'  要求输出文本 test.dat是已经存在的文件,删去这一文件状态控制语句试一下看,个人觉得最大问题在这里

这个我已经调试过。文件能编译完,也能运行,就是没有输出结果。
4楼2012-02-19 19:48:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ygl820

至尊木虫 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
霹雳旋风(金币+10): 谢谢 2012-02-21 10:29:01
按你的意思,将文件test.dat作为输出了,运行完成后后,打开它。fortran文件操作性不强,看看test.dat是否只读。
5楼2012-02-21 10:24:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

霹雳旋风

荣誉版主 (著名写手)

引用回帖:
: Originally posted by ygl820 at 2012-02-21 10:24:17:
按你的意思,将文件test.dat作为输出了,运行完成后后,打开它。fortran文件操作性不强,看看test.dat是否只读。

也不是只读。运行可以就是没有输出数据。急死我了。
6楼2012-02-21 10:28:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ygl820

至尊木虫 (知名作家)

运行后,test.dat生成了没有。
7楼2012-02-21 10:31:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

余泽成(金币+1): 谢谢参与应助! 2012-02-25 04:29:52
这个程序用 gfortran 没有办法编译,显示 cotan 未定义……

你这个 test.dat 是空的很正常啊,说明 L .LE. 0 啊,呵呵……
9楼2012-02-23 13:54:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 霹雳旋风 的主题更新
信息提示
请填处理意见