Fortran中的填充矩阵错误

时间:2013-11-22 21:32:59

标签: arrays fortran fortran77

我有以下问题:

我在Fortran 77上有一个子程序,它必须返回一维数组D_Y。所需的所有值都从主程序中正确传输,但矩阵D_Y(D_Y(16-18))的三个元素设置为0.0,我不知道为什么。

NDIM = 18,P1和P2是正确的,所有参数,它们在公式中都是正确的,但它们的总和总是设置为0!

SUBROUTINE DY(Y,T,PARAM,NDIM,D_Y)
  IMPLICIT NONE
    real(8),intent(in)::Y(*)
    real(8),intent(in)::PARAM(*),T
  real(8),intent(out)::D_Y(NDIM)
  integer::D
  integer,intent(in)::NDIM
    real(8)::R,R1,R2,P1,P2
  open(18,file='kinetic2.txt',status='unknown')

  R=((Y(1)-Y(4))**2.D0+(Y(2)-Y(5))**2.D0+(Y(3)-Y(6))**2.D0)**0.5D0
  R1=((Y(1)-Y(13))**2.D0+(Y(2)-Y(14))**2.D0+(Y(3)-Y(15))**2.D0)**0.5D0
  R2=((Y(4)-Y(13))**2.D0+(Y(5)-Y(14))**2.D0+(Y(6)-Y(15))**2.D0)**0.5D0

 DO D=1,6
  D_Y(D)=Y(D+6)
 END DO

 DO D=7,9
  D_Y(D)=-(PARAM(1)*PARAM(3))*(Y(D-6)-Y(D-3))/((R)**3.D0)
 END DO

 DO D=10,12
  D_Y(D)=-(PARAM(1)*PARAM(2))*(Y(D-6)-Y(D-9))/((R)**3.D0)
 END DO

 DO D=13,15
  D_Y(D)=Y(D+3)
 END DO

 DO D=16,18
  P1=-(PARAM(1)*PARAM(3))*(Y(D-3)-Y(D-12))/((R2)**3.D0)
  P2=-(PARAM(1)*PARAM(2))*(Y(D-3)-Y(D-15))/((R1)**3.D0)
D_Y(D)=P1+P2
            write(18,*) P1,P2,D_Y(D)
 END DO
  RETURN
  END

1 个答案:

答案 0 :(得分:1)

如果您的编译器在第1列中将代码视为固定格式D,例如在

行中
D_Y(D)=P1+P2

可以理解为评论。检查编译器文档和选项。