Fortran 变量多于值错误

Fortran 变量多于值错误,fortran,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 v

我的节目一开始是这样的

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
有人能帮我弄清楚这是怎么回事吗

来自

real*4 zz0(20),a0(20),fr0(20)
您可以看到
fr0
a0
zz
的维度为
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的数组

来自

real*4 zz0(20),a0(20),fr0(20)
您可以看到
fr0
a0
zz
的维度为
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的数组

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

在这种情况下,为每个第一部分提供了一个完整的数组,因此每个列表都由相应数组(其中有二十个)的所有元素组成。因此,必须有二十个值元素(as)

不过,为了补充这个答案,不初始化整个数组并不是错误的。人们本可以这样做

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./
 ...

等等,或者如果一个人真的只关心前六个元素(例如,当编译之间的长度不同,但前六个元素很重要时)

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

在这种情况下,为每个第一部分提供了一个完整的数组,因此每个列表都包含相应数组的所有元素(其中有二十个元素)。因此,必须有二十个值元素(as)

不过,为了补充这个答案,不初始化整个数组并不是错误的

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./
 ...

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

谢谢!!!我不是Fortran程序员,我只是在修改给我的模拟代码。我没有意识到数字乘以0的重要性。谢谢!!!我不是Fortran程序员,我只是在修改给我的模拟代码。我没有意识到数字乘以0的重要性。