左侧和右侧的阵列形状不符合

时间:2015-11-17 02:42:44

标签: fortran fortran90

android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }


        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }


    buildTypes {
        foo {
            signingConfig signingConfigs.myConfig
        }
    }
}

我基本上试图以一种糟糕的方式传播波函数..但是这个项目告诉我像这样传播。所以n是常数,h是n乘n阵列。

为什么它一直告诉我左侧和右侧的阵列形状在do循环中不一致?如何改进它以使左右相等?

1 个答案:

答案 0 :(得分:1)

Gfortran 5.2在错误中发出更多信息:

    psi(n,j) = psi(n,j) - ci * dt * h *psi(n,j)
   1
Error: Incompatible ranks 0 and 2 in assignment at (1)

数组的LHS为0,因为psi(n,j)是标量。在RHS上,psi(n,j)的两个实例都是0级标量,但h是排名2的数组。你有:

scalar = scalar - scalar * scalar * rank 2 array * scalar
scalar = scalar - rank 2 array
scalar = rank 2 array

这是因为标量被提升为适合上述操作的数组,因此它们可以作用于h的所有元素。要使两侧的排名相等,您需要选择h的单个元素或对其执行一些其他操作,将其缩减为标量。

值得注意的是,您的循环是否正确尚不清楚。您的'n'值固定为用户输入的数组边界值,因此您的循环只迭代数组的一行,并且根据ddt的选择,您将超出数组范围如果t > n,则间隔dt之间的所有行元素都不会更改。看到你的计算会触及很少的元素,这让我觉得它不对。您的初始值j也超出了数组的范围,因为除非明确说明边界,否则fortran数组索引从1开始。