【发布时间】:2017-01-01 19:45:35
【问题描述】:
我有一个名为 m_mixing.F90 的文件。
在这个文件中,有一个函数给出了编译错误:
function getstackval(mix,sidx,hidx) result(d1)
type(tMixer), intent(in) :: mix
integer, intent(in) :: sidx
integer, intent(in), optional :: hidx
real(dp), pointer, contiguous :: d1(:) !!This line is causing problems!
type(dData1D), pointer :: dD1
if ( present(hidx) ) then
dD1 => get_pointer(mix%stack(sidx),hidx)
else
dD1 => get_pointer(mix%stack(sidx), &
n_items(mix%stack(sidx)))
end if
d1 => val(dD1)
end function getstackval
我编译如下:
mpiifort -c -g -DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT m_mixing.F90
这是错误:
/opt/apps/siesta/siesta-trunk-r561/Src/m_mixing.F90:2533.13:
real(dp),指针,连续 :: d1(:)
.............1
1 错误:(1) 处名称中的字符无效
好像不喜欢“指针”这个关键词?
谁能给我一些建议?我是 Fortran 新手。
【问题讨论】:
-
您可以尝试改用
real(kind=dp),.....吗? -
第 13 个字符似乎是逗号。确保逗号只是一个普通的逗号,而不是一些奇怪的类似逗号的非 ascii 字符。还要检查该区域中的其他字符。
-
如果您删除
d1上的contiguous属性,问题是否仍然存在? -
当我删除“连续”关键字时它就消失了!但是我刚刚做了什么?
-
似乎编译器不喜欢函数结果的
contiguous属性,而且它只是没有一个很好的错误消息。您使用的是哪个版本的 ifort?
标签: fortran mpi intel-fortran