双精度数组构造函数“需要显式类型”

时间:2018-09-20 07:17:39

标签: fortran gfortran

我尝试使用gfortran编译旧的Fortran 90程序,但这不起作用:

REAL(DP), DIMENSION(10,6) :: csCO2

csCO2(1,:) = (/DOUBLE PRECISION :: 0.0, 0.0, 0.18261340d7, &
0.79224365d2, 0.0, 0.0/)
csCO2(2,:) = (/DOUBLE PRECISION :: 0.0, 0.0, 0.0,&
0.66560660d-4, 0.57152798d-5, 0.3022236d-9/)

这给了我错误:

csCO2(1,:) = (/DOUBLE PRECISION :: 0.0, 0.0, 0.18261340d7, &
           ^                                             
cf90-113 f90fe: ERROR FUGCO2, File = CO2EOS.f90, Line = 56, Column = 16 
  IMPLICIT NONE is specified in the local scope, therefore an explicit type 
must be specified for data object "DOUBLE".                      ^                                      
cf90-197 f90fe: ERROR FUGCO2, File = CO2EOS.f90, Line = 56, Column = 23 
  Unexpected syntax: "/)" was expected but found "P".

我该如何解决?

2 个答案:

答案 0 :(得分:2)

数组构造函数语法

(/ type :: value, ... /)

不是Fortran 90功能。它是在Fortran 2003中引入的。

编译中的错误表明您的编译器无法识别此语法。您应该使用支持此类数组构造函数的更高版本的编译器。

您可以将源代码修改为这种情况,

 csCO2(1,:) = (/0.0_dp, 0.0_dp, 0.18261340e7_dp, 0.79224365e2_dp, 0.0_dp, 0.0_dp/)

等,但是使用现代编译器会更好。

答案 1 :(得分:0)

从gfortran更改为x86_64-w64-mingw32-gfortran.exe,并且可以正常使用