比值错误更多的变量

时间:2015-09-13 18:10:57

标签: fortran

我的程序就像

一样
implicit real*8 (a-h,o-z)
parameter (pi=3.141592654)
real*4 yfl
real*4 zz0(20),a0(20),fr0(20)
real*4 par_ion(6)

但我稍后会收到如下错误消息。

data fr0/0.780,0.209,0.009,3*0./     ! fraction by mass for elemen
    1
Error: DATA statement at (1) has more variables than values
music-atmosphere-100gev.f:82.10:

data a0/14.0097,15.9994,39.948,3*0./     ! atomic weights for elem
    1
Error: DATA statement at (1) has more variables than values
music-atmosphere-100gev.f:81.10:

data zz0/7.,8.,18.,3*0./    ! atomic numbers for elements in atmos
    1
Error: DATA statement at (1) has more variables than values

任何人都可以帮我弄清楚这里发生了什么吗?

2 个答案:

答案 0 :(得分:3)

real*4 zz0(20),a0(20),fr0(20)

您可以看到fr0a0zz的维度为20。所以正确的初始化应该是:

data fr0/0.780,0.209,0.009,17*0./
data a0/14.0097,15.9994,39.948,17*0./
data zz0/7.,8.,18.,17*0./

这样,您可以分配长度为20的数组(三个值和17次零),而不是之前的长度为6的数组。

答案 1 :(得分:2)

当使用data语句进行显式初始化时,需要两个部分中的元素数(第一个/之前的变量两个/ s)之间的值是相同的。

在这种情况下,为每个第一部分给出一个完整的数组,因此每个列表包含相应数组的所有元素(其中有20个)。因此,必须有20个值元素(如Alexander Vogt gives)。

但是,要添加该答案,不要初始化整个数组并不是错误的。可以改为

data fr0(1:6)/0.780,0.209,0.009,3*0./

fr0的前六个元素提供显式初始化。 [在这种情况下fr0作为一个数组最初没有定义,只是它的前六个元素。]当一个人有很长的初始化时,这很有用:

 data fr0(1:6)/0.780,0.209,0.009,3*0./
 data fr0(7:12)/0.780,0.209,0.009,3*0./
 ...

等,或者如果一个人真的只关心前六个元素(比如编辑时长度不同,但第一个元素很重要)