首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran中的错误填充矩阵

Fortran中的错误填充矩阵
EN

Stack Overflow用户
提问于 2013-11-22 21:32:58
回答 1查看 105关注 0票数 0

我有以下问题:

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-23 12:09:03

如果编译器将代码视为固定形式,则在第1列(如行)中使用D

代码语言:javascript
复制
D_Y(D)=P1+P2

可能被理解为一种评论。检查编译器文档和选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20154887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档