回 帖 发 新 帖 刷新版面

主题:形参实参调用失败,崩溃!!怎么能这样呢?!!

各位大侠,大家好!
我有个程序,里面有两个子程序,一个子程序用来产生矩阵H00,H10,另一个矩阵用来调用它们,为什么调用的时候会出错呢?
             PROGRAM MAIN  
    IMPLICIT REAL*8(A-H,O-Z)
      character fname*15
    PARAMETER (N=34,t=2.8)    
    COMPLEX*16 H00(N,N),H10(N,N),H01(N,N),H12(N,N),H21(N,N)
    OPEN(UNIT=1,STATUS='unknown',FILE='biaomian1.DAT')
    CALL GMATRIX(T,N,H00,H10,H12)  
      H00=H00
      H10=H10
      H12=H12    
     DO IA=1,N
      DO IB=1,N
      WRITE(1,*) IA,IB,REAL(H10(IA,IB))
      ENDDO
      ENDDO
    CALL CESHI(N,H00,H10)
    END    
    subroutine GMATRIX(T,N,H00,H10,H12)
    implicit real*8(a-h,o-z)
    complex*16 i,H00(N,N),H10(N,N),H12(N,N) 
    H00=0.0D0
    H10=0.0D0     
      H12=0.0D0
      do J=1,N-1
    H00(J,J+1)=-t
    H00(J+1,J)=-t    
    enddo  
      do j=1,N
    if(mod(j,2)==1) then
    H10(j,j)=-t
      endif
      enddo     
      do j=1,N
      if(mod(j,2)==0) then
      H12(j,j)=-t
      endif
      enddo
    RETURN
    end    
      subroutine  CESHI(M,H00,H10)
      implicit real*8(a-h,o-z)
    complex*16 H00(m,m),H10(M,M)    
      OPEN(UNIT=2,STATUS='unknown',FILE='JJJ1.DAT')      
      DO IA=1,M
      DO IB=1,M
      WRITE(2,*) IA,IB,REAL(H10(IA,IA))
      ENDDO
      ENDDO     
      return
      END
      好郁闷啊!!就几行字,就是检查不出来哪里的问题!!
草了!!

回复列表 (共10个回复)

沙发

太操蛋了!!怎么查都查不出来哪里出的问题!!

板凳


运行了,没有你说的错误

3 楼

我希望你首先提高自己的素质

其次,我希望你给出你的错误提示,以便他人判断。

4 楼

这样的,我有几个矩阵,在子程序 GMATRIX(T,N,H00,H10,H12) 里定义,得到之后,向
CESHI(M,H00,H10)  传输,但是很奇怪,子程序得到的矩阵是对的,但是到了子程序里就错了,有两个输出文件,可以看到这两个文件虽然定义的是同一个数组,但是内容却不相同。关键是这个问题。不知道怎么了

5 楼


按理说,我没做任何操作,仅仅是把这个矩阵从外面拿到里面去了,应该内部和外部都相同,但是不同啊。期待有人能帮我下了!!

感谢!!

昨天太激,所以用词不当,请勿见怪!!

谢谢啊!!

6 楼


老兄,你看下两个文件生成的数组相同吗?我这里为什么得到了两个不同的数组呢?同一个数组只是一个在主程序里,一个在子程序里,怎么会不同呢?

7 楼

崩溃!!这里出错了:
      DO IA=1,M
      DO IB=1,M
      WRITE(2,*) IA,IB,REAL(H10(IA,IA))
      ENDDO
      ENDDO     
应该是H10(IA,IBA),写成H10(IA,IA)了


谢谢大家了

8 楼

subroutine  CESHI(M,H00,H10)
      implicit real*8(a-h,o-z)
    complex*16 H00(m,m),H10(M,M)    
      OPEN(UNIT=2,STATUS='unknown',FILE='JJJ1.DAT')      
      DO IA=1,M
      DO IB=1,M
      WRITE(2,*) IA,IB,REAL(H10(IA,IA))  [color=red]!//此处改为WRITE(2,*) IA,IB,REAL(H10(IA,IB))[/color]
      ENDDO
      ENDDO     
      return
      END

9 楼

晕,你自己先发现了。

10 楼

石头还是很敬业的!!哎。自认不如啊!!我在这个论坛上有问题才来请教下,很少给论坛做贡献!!向石头老兄学习了。能力不济啊!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册