행렬 * 행렬, 행렬 * 벡터 및 벡터 * 벡터를 계산하는 BLAS의 서브 루틴 dgemm, dgemv 및 ddot를 사용하는 포트란 서브 루틴이 있습니다. 나는 m * m 행렬과 m * 1 벡터를가집니다. 어떤 경우에는 m = 1이다. 이러한 서브 루틴은 이러한 경우 제대로 작동하지 않는 것으로 보입니다. 그들은 오류를주지 않지만 결과에 수치 적 불안정성이있는 것으로 보입니다. 그래서 내가 좋아하는 뭔가를 작성해야 :BLAS 서브 루틴 dgemm, dgemv 및 ddot가 스칼라에서 작동하지 않습니까?
if(m>1) then
vtuni(i,t) = yt(i,t) - ct(i,t) - ddot(m, zt(i,1:m,(t-1)*tvar(3)+1), 1, arec, 1)
else
vtuni(i,t) = yt(i,t) - ct(i,t) - zt(i,1,(t-1)*tvar(3)+1)*arec(1)
그래서 내 실제 질문은, 내가 바로 그 BLAS '서브 루틴 m = 1 또는 내 코드에서 잘못된 뭔가가있을 때 제대로 작동하지 않습니다 무엇입니까? 컴파일러가 이것에 영향을 줄 수 있습니까? 나는 gfortran을 사용하고있다.