subroutine d_matmul(A,B,C,alfa,beta)
real(8),dimension(:,:),intent(inout) :: A ![N,K]
real(8),dimension(:,:),intent(inout) :: B ![K,M]
real(8),dimension(:,:),intent(inout) :: C ![N,M]
real(8),optional :: alfa,beta
real(8) :: alfa_,beta_
integer :: N,K,M
!
! C = alfa*A*B + beta*C
!
alfa_ = 1d0 ;if(present(alfa))alfa_=alfa
beta_ = 0d0 ;if(present(beta))beta_=beta
!
!
N = size(A,1)
K = size(A,2) !==size(B,1)
M = size(B,2)
if(any(shape(B)/=[K,M]))stop "d_matmul error: B has illegal shape"
if(any(shape(C)/=[N,M]))stop "d_matmul error: C has illegal shape"
!
call DGEMM('N', 'N', N, M, K, alfa_, A, N, B, K, beta_, C, M)
!
return
end subroutine d_matmul