【问题标题】:Error: Incompatible ranks 0 and 1 in assignment at (1)错误:在 (1) 的分配中不相容的等级 0 和 1
【发布时间】:2016-05-17 05:13:59
【问题描述】:

我在不规则网格上使用有限差分法,这是代码的重要部分:

 IMPLICIT DOUBLE PRECISION (A-Z)
      REAL*16 IPSI,ICORR,POT(20000),VA(20000),delta1(20000),
     $delta2(20000),R(20000),a,b,d
      COMPLEX Y(20000),TY2(50000),Z(20000),PSI0(20000),RES,DPSI,C,
     $CORR,OPK
 DO I=3,NR-1
    delta1=R(I)-R(I-1)
    delta2=R(I+1)-R(I)
    a=(2/(delta1*(delta1+delta2)))
    b=(-2/(delta1*delta2))
    d=(2/(delta2*(delta1+delta2)))
    TY2(I)=((d*Z(I+1))+(b*Z(I))+(a*Z(I-1)))
 ENDDO

当我尝试编译时,我得到了错误:在 (1) 的 a、b、d 和 TY2 的赋值中不兼容排名 0 和 1。任何解决方案将不胜感激。谢谢!

【问题讨论】:

  • 如果你把这样的代码写成新代码,我强烈建议你改变你的风格。这不是 1982 年。您的索引是隐含的两倍。您正在混合单一复数、双重和四重实数。一团糟。
  • 我回滚到现有答案所基于的原始问题。您的新代码完全不同。如果您根据答案更改代码但仍有问题,您应该提出一个新问题。但是,在提出新问题之前,请确保使用IMPLICIT NONE。在没有IMPLICIT NONE 的情况下尝试发布这么长的代码是毫无价值的。这是必不可少的

标签: fortran


【解决方案1】:
    a=(2/(delta1*(delta1+delta2)))
    b=(-2/(delta1*delta2))

并且以下行是非法的。右边是数组,左边是标量。

也许你忘记了像delta1(I)delta1 这样的索引应该是一个标量。我们不能说不了解您的代码。

【讨论】:

  • 对不起,我是编程新手。我将其余代码放在问题中。你不知道我多么感谢你的反馈。谢谢!
  • @Kev_mad 现在您的代码完全不同,我的回答没有意义。您更改了声明部分。你不应该那样做!阅读meta.stackoverflow.com/a/309245/721644 您也不会报告编译器在哪一行报告错误。谁应该在这么大的乱码中找到它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多