我想將複雜Fortran陣列的虛構部分的「指針」傳遞給僅對實數進行操作的BLAS函數。我的意思是C語言意義上的「指針」,因爲我不想涉及任何數據複製。將複雜Fortran陣列的虛構部分的「指針」傳遞給BLAS例程
例如,請考慮下面這個簡單的代碼(我的實際代碼稍微複雜):
function foo(c1, c2, n) result(r)
complex, dimension(:), intent(in) :: c1, c2
integer, intent(in) :: n
real :: r
real, external :: SDOT
r = SDOT(n, c1(1)%re, 2, c2(1)%im, 2)
end function foo
不幸的是,%re
和%im
在2008年的Fortran唯一指定。此外,我不確定該標準是否允許將複雜的部件選擇器應用於陣列的各個元素,因爲我的編譯器都不支持這一點。
gfortran
抱怨「對於非派生類型變量,意外'%'」。
有沒有其他方法可以實現我所需要的?
Fortran也有指針。但是,您的示例不使用它們。你真的需要一個指針嗎?或者你只是想傳遞一個參數? –
另請參閱http://stackoverflow.com/questions/31590004/is-the-storage-of-complex-in-fortran-guaranteed-to-be-two-reals/和http://stackoverflow.com/questions/ 36874982/equivalent-in-fortran-77-real-and-complex-variable –
'c1(1)%re'是完全有效的,但不是數組,因此我不確定這個問題的部分是什麼意思。 – francescalus