第50行出错:尝试在类型声明中给出DATA

时间:2015-09-21 12:43:40

标签: fortran

我尝试编译FORTRAN 77代码,我遇到了这样的问题。

  integer row(nnzmax+nszero),column(nnzmax+nszero),
 +        ireg(nximax),florsm(nzimax)/nzimax*2/
  real lambda,imodel(nximax,nzimax),dm(nmmax),
 +     dum1(nmmax),dum2(nmmax),data(ndmax+nsconst),
 +     anz(nnzmax+nszero),ibmodel(nximax,nzimax),
 +     smwz(nzimax)/nzimax*-1./,spwz(nzimax)/nzimax*-1./

Error on line 50: attempt to give DATA in type-declaration
Error on line 52: attempt to give DATA in type-declaration

我曾经使用过这段代码,但它已经与英特尔Fotran编译器一起编译。我搬到了其他国家,所以我没有在这里安装ifort。我现在正在使用fort77。我应该尝试一些编译选项还是?我已经使用这个脚本从这个文件夹中编译app .f。

#! /bin/csh -f

set list=`ls *.f`
set FLAG="-o"
echo $list
foreach file (${list})
  echo $file
  f77 ${file} ${FLAG} ${file:r}
  mv ${file:r} ../bin/.

end

我已经更改了这样的声明:

整数行(nnzmax + nszero),列(nnzmax + nszero),  + ireg(nximax),florsm(nzimax),  + data florsm / nzimax * 2 /   真正的lambda,imodel(nximax,nzimax),dm(nmmax),  + dum1(nmmax),dum2(nmmax),数据(ndmax + nsconst),  + anz(nnzmax + nszero),ibmodel(nximax,nzimax),  + data smwz /nzimax*-1./,  + data spwz / nzimax * -1 ./

但我还是

Error on line 50: attempt to give DATA in type-declaration
Error on line 53: attempt to give DATA in type-declaration
Error on line 385: Declaration error for smwz: used as variable
Error on line 385: Declaration error for smwz: may not appear in namelist
Error on line 385: Declaration error for spwz: used as variable
Error on line 385: Declaration error for spwz: may not appear in namelist

1 个答案:

答案 0 :(得分:4)

这个片段,以及后来的类似片段

florsm(nzimax)/nzimax*2/

看起来像是一种非标准的初始化变量的方法,它将一个data语句合并到声明中。更标准的方法是将两者分开,例如

florsm(nzimax)
...
data florsm /nzimax*2/

使用英特尔Fortran编译器的一个优点是它的悠久历史;一路走来,它已经接受并继续接受各种非标准功能。我猜这是其中之一,你提到的其他编译器都不能接受。

当然,这似乎是错误陈述似乎告诉我们的内容。

标准替换可能是

florsm(nzimax) = 2

但是它利用了Fortran 90功能,这个功能称为fort77可能也不会理解。