我有一个整数变量,它在我的子程序的开头声明。在我将它用作forall
构造内的控制变量后,我不能再将它用作do
循环的控制变量。编译器(英特尔,v. 12.0.3)抱怨
xyz.f90(1210): error #6404: This name does not have a type, and must have an explicit type. [I]
do i=1,sp_basis%num_dim
---------------^
xyz.f90(1210): error #6063: An INTEGER or REAL data type is required in this context. [I]
do i=1,sp_basis%num_dim
-c
我试图写一个小例子来复制这种行为(并使用与实际有问题的相同的编译器选项编译文件,除了implicit none
适用于该代码所属的整个模块):
subroutine xyz(stuff)
use data, only: ppm, npeaks
! some declarations
integer :: i ! ...
associate(sp_basis => public_spectra%basis(counter))
spots = npeaks * np
allocate(ref_curves(spots,npeaks,sp_basis%num_dim), stat=stat)
if (stat.ne.0) then
! ...
end if
forall (i=1:max_dim) uppers(i) = ubound(sp_int%int,i)
forall (i=1:max_dim) lowers(i) = lbound(sp_int%int,i)
forall (i=1:npeaks,j=1:sp_basis%num_dim) peak_pos_hertz(j,i) = ppm_to_hertz(ppm(permutation(j),i), sp_axes(j))
do peak_considered=1,npeaks
do pos=(peak_considered-1)*np+1,peak_considered*np
do i=1,sp_basis%num_dim ! <-- COMPLAINT
如果我更改i
为未用作forall
构造控制变量的名称,一切正常。另外,这是我第二次遇到这个问题。
这就是编译完成的方式(xyz.f90 是构成整个程序的众多文件之一):
ifort -c -g -C -check noarg_temp_created -traceback -warn -warn nodeclarations -nogen-interface xyz.f90
你们中有人知道问题可能是什么吗?
非常感谢您的时间!