wangjin27 发表于 2014-2-18 11:02:24

程序有很多错误,谁能帮忙看看

本帖最后由 wangjin27 于 2014-2-18 11:05 编辑

!Console7.f90
!
!FUNCTIONS:
!Console7 - Entry point of console application.
!

!****************************************************************************
!
!PROGRAM: Console7
!
!PURPOSE:Entry point for the console application.
!
!****************************************************************************
MODULE GLOBAL
   implicit double precision(a-h,o-z)
INTEGER IRZ(3,8),IRF(2,4),NOD(8,100),IB(8,220),IC(8,220),ID(220),NT(660),MMF(8),KKF(100)
REAL*4 RZ(8,8),GBF(2,4),GB(3,8),GBX(100,4),TJ(100),PFN(2,4,4),PPXF(2,100,4),PYF(2,100,4),FV(100,4),FN(4,4),FS(1,4),FC(1,4),UF(100,4),VF(100,4),FMJ(100),TAF(220),X(3,220),U(3,220),PR(3,8,8),PX(8,100,8),py(8,100,8),pz(8,100,8),hp(100,8),eq1(10),e(6,100,8),ev(100,8),eqm(100),fhls(100,4),s2(8,100),s1(100),evm(100),eqg(100),TP(100),S3(8,100),A1(660),a2(660),a(10000),UU(3,220),DLX(15),HDX(15),RDX(15)
REAL V1,V2,V3,V4,V5,V6,V7,V8,V9,V0,DL,PP,GA,GC,GN,G0,YKZ,PS,UP,W,WP,WT,F,GM,T0,T1,VR,AL,TL,BB,H0,H1,R,TK,DTS,STR,STL
    end module
    program main
    use global
   OPEN(5,FILE='fi,dat',status='old')
   OPEN(6,FILE='fo.dat',status='old')
   OPEN(7,FILE='fb.dat',status='old')
   READ(5,*)R,VR,BB,HO,H1,F,TK
   read(5,*)J1,J2,J3,j1f,j1b,N6
   read(5,*)GA,GC,GM,GN,G0,T0,T1,ykz
   read(5,*)e1,e2,e3,e4,e5,e6,e7,e8,e9,e0
   read(5,*)v1,v2,v3,v4,v5,v6,v7,v8,v9,v0
   WRITE(*,10)R,VR,BB,H0,H1,F,TK,J1,J2,J3,N6,YKZ,GA,GC,G,GN,T0,T1
10FORMAT(7F10.4/4I10/F10.5/7F10.3)
    CALL NEN1
    CALL NEN2
    CALL NEN3
    CALL NEN4
    call kmf
    write(*,*)(kkf(j),j=1,nm)
    write(7,*)(kkf(j),j=1,nm)
    CALL INXU
    CALL FBC
    CALL ENERGY
17NEG=0
    M6=0
    N100=0
999 N100=N100+1
    IF(N100.GE.n_max)GO TO 901
    call chkd
    CALL MINFI
    YB=X(2,NP)
    CALL XYZ
    IF(abs(YB-X(2,NP))/YB.LE.v1)GO TO 900
    CALL FBC
    CALL FEM
    CALL ENERGY
    GO TO 999
901 write(*,*)'attention:N100>N_max!!!'
900 CALL STRS
    CALL PRT
    STOP
    END
    SUBROUTINE NEN1
    NE1=J1+1
    NE2=J2+1
    NE3=J3+1
    nn=ne2*ne3
    NN3=NN*3
    jn=j2*j3
    j1c=j1-j1f-j1b
    NM=J1*J2*J3
    NP=NE1*NE2*NE3
    DO 100 I=1,J1
      DO 100 J=1,J2
            do 100 l=1,j3
                K=(I-1)*NN+(J-1)*ne3+1
                N=(I-1)*Jn+(j-1)*j3+1
                NOD(1,N)=K
                NOD(2,N)=K+1
                NOD(3,N)=K+ne3
                NOD(4,N)=K+ne3+1
                NOD(5,N)=K+NN
                NOD(6,N)=K+NN+1
                NOD(7,NN)=K+NN+ne3
100 NOD(8,N)=K+NN+ne3+1
    END
    SUBROUTINE INXU
    AL=SQRT(R*(H0-H1)*2.0)
    AFA=AL/R
    DL=AL/J1C
    DB=BB/J2
    DH0=H0/J3
    DH1=H1/J3
    call rclear(x,3*np)
    DO 300 I=1,NE1
      DO 300 K=1,NE2
            DO 300 J=1,NE3
                I1=(I-1)*NN+(K-1)*NE3+J
                X(1,I1)=DL*(I-1)
                X(2,I1)=DB*(K-1)
300 CONTINUE
    DO 301 I=1,J1B+1
      DO 301 K=1,NE2
            DO 301 J=1,NE3
                I1=(I-1)*NN+(K-1)*NE3+J
                X(3,I1)=DH0*(NE3-J)
301 CONTINUE
    DO 302 I=J1B+2,NE1-J1F
      DO 302 K=1,NE2
            DO 302 J=1,NE3
                I1=(I-1)*NN+(K-1)*NE3+J
                X(3,I1)=(R+H1-SQRT(R**2-(AL-X(1,i1))**2))/j3*(ne3-j)               
302             COTINUE
                DO 303 I=NE1-J1F+1,NE1
                  DO 303 K=1,NE2
                        DO 303 J=1,NE3
                            I1=(I-1)*NN+(K-1)*NE3+J
                            X(3,I1)=DH1*(NE3-J)
303             CONTINUE
                DO 304 I=1,NE1
                  DO 304 K=1,NE2
                        DO 304 J=1,NE3
                            I1=(I-1)*NN+(K-1)*NE3+J
                            TAF(I1)=0.
                            IF(J.NE.1)TAF(I1)=-(AL+j1b*dl-X(1,I1))/(R+H1-X(3,I1))
304             CONTINUE
                DO 441 J=1,NM
                  EQM(J)=VR*AFA/(H0+H1)
                  hhu=(x(3,nod(1,j))+x(3,nod(3,j))+x(3,nod(5,j))+x(3,nod(7,j)))/4.
                  hhb=(x(3,nod(2,j))+x(3,nod(4,j))+x(3,nod(6,j))+x(3,nod(8,j)))/4.
                  hhd=h0/j3
                  EQ1(J)=(hhd-(hhu-hhb))/hhd*1.075
                  if(eq1(j).le.0.01)eq1(j)=0.01
                  if(eqm(j).le0.01)eqm(j)=0.01
                  S1(J)=GA*(V0+GC*EQ1(J))**GN*EQM(J)**GM+G0
441             TP(J)=S1(J)*.57735*TK
                PP=S1(2*j2+1)*(1.+0.25*AL/(H0+H1))
                GAM=0.5*AFA*(1.-0.5*AFA/TK)
                BG=GAM/AFA
                BE=J1C/BG
                GG=R+H1-R*COS(GAM)
                VOM=VR*COS(GAM)*GG
                call rclear(u,3*np)
                DO 309 I=J1B+1,NE1-J1F
                  DO 309 K=1,NE2
                        DO 309 J=1,NE3
                            I1=(I-1)*NN+(K-1)*NE3+J
                            I3=(I-1)*NN+1
                            U(1,I1)=VOM/X(3,I3)*(1.+E1*(BE+J1B-I))
                            U(3,I1)=U(1,I1)*TAF(I3)/j3*(NE3-J)
                            U(2,I1)=-ykz*(K-1)*U(3,I3)/j2
309             CONTINUE
                DO 319 I=1,J1B
                  DO 319 J=1,NN
                        I1=(I-1)*NN+J
                        U(1,I1)=U(1,J1B*NN+1)
                        U(3,I1)=0.
                        U(2,I1)=0.
319             CONTINUE
                DO 329 I=NE1-J1F+1,NE1
                  DO 329 J=1,NN
                        I1=(I-1)*NN+J
                        U(1,I1)=U(1,NP-J1F*NN)
                        U(3,I1)=0.
                        U(2,I1)=0.
329             CONTINUE
                CALL XYZ
    END
    怎么不显示?附件能行吗

楚香饭 发表于 2014-2-18 11:03:32

啥也没有?

楚香饭 发表于 2014-2-18 11:27:50

每一个使用了 global 模块的 subroutine,都要写 use global,不止主程序需要写,其他子程序也需要。

另外,有很多因抄写错误引起的地方,对照原书修改吧。如有问题,请再回复。

珊瑚虫 发表于 2014-2-18 19:04:24

本帖最后由 珊瑚虫 于 2014-2-18 19:08 编辑

看了你的代码,和楼上的观点一样,程序编写必须细心, 程序中大量错误,均为抄写导致,请楼主详细查错后再提问。
页: [1]
查看完整版本: 程序有很多错误,谁能帮忙看看