我在尝试使用Lapack函数时遇到了一个奇怪的问题
计算三角矩阵的范数。基本上,我有一个可以工作的单文件程序
和一些其他的Lapack过程,现在我想把它分成几个模块。
在一个这样的模块中以子例程结束。但是,尝试使用gfortran-10编译上述模块(通过MPI包装器编译器,因为其中也有一些MPI ),如下所示
mpifort -o kde.o -c kde.f90导致错误:
‘dlantr’ at (1) is not a function这很奇怪,因为
其他Lapack过程(在我的例子中
和
)在同一个子例程中
同一模块中的一个简单的子例程,如
subroutine foo(a)
real(kind=DP), intent(in) :: a(2,2)
real(kind=DP) :: tmp, dlantr
print*, dlantr('F','L','N',2,2,a,2,tmp)**2
end subroutine从主程序调用时也可以正常工作。在出现问题的子例程中,以与上面相同的方式在原始程序中声明它,即
可以找到有问题的代码
这里
..。是什么导致了这种行为,以及如何修复它?
发布于 2021-03-01 23:47:57
我最初的回答是错误的。这可能是一个编译器错误
https://gcc.gnu.org/bugzilla/show
_
bug.cgi?id=87127
..。尽管如此,这种显式使用
属性使错误消失:
real(kind=DP), external :: dlantr此错误的MWE为:
subroutine sub
integer :: d
real :: f
real :: a
associate (c => d)
a = f()
end associate
end subroutine subhttps://stackoverflow.com/questions/66424857
复制相似问题