dmatmul_csr_csr Function

public function dmatmul_csr_csr(A, B)

Arguments

Type IntentOptional Attributes Name
type(sparse_dmatrix_csr), intent(in) :: A
type(sparse_dmatrix_csr), intent(in) :: B

Return Value real


Calls

proc~~dmatmul_csr_csr~~CallsGraph proc~dmatmul_csr_csr dmatmul_csr_csr none~init sparse_dmatrix_csr%init proc~dmatmul_csr_csr->none~init none~insert sparse_dmatrix_csr%insert proc~dmatmul_csr_csr->none~insert interface~append append none~insert->interface~append proc~binary_search binary_search none~insert->proc~binary_search proc~append_d append_D interface~append->proc~append_d proc~append_i append_I interface~append->proc~append_i proc~append_z append_Z interface~append->proc~append_z proc~binary_search->proc~binary_search proc~sort_array sort_array proc~binary_search->proc~sort_array

Called by

proc~~dmatmul_csr_csr~~CalledByGraph proc~dmatmul_csr_csr dmatmul_csr_csr interface~matmul~2 matmul interface~matmul~2->proc~dmatmul_csr_csr

Source Code

  function dmatmul_csr_csr(A,B) return(AxB)
    type(sparse_dmatrix_csr), intent(in) :: A,B
    type(sparse_dmatrix_csr)             :: AxB
    integer                              :: Na(2),Nb(2)
    integer                              :: irow,j,jcol,k,kcol
    real(8)                              :: aval,bval
    
    Na = A%shape(); Nb = B%shape()
    if(Na(2)/=Nb(1))stop "Matrix not matching dimension in dmatmul_csr_csr"
    call AxB%free()
    call AxB%init(Na(1),Nb(2))
    do irow=1,Na(1)
       do j=1,A%row(irow)%Size
          jcol=A%row(irow)%cols(j)
          aval=A%row(irow)%vals(j)
          do k=1,B%row(jcol)%Size
             kcol=B%row(jcol)%cols(k)
             bval=B%row(jcol)%vals(k)
             AxB%insert(aval*bval,irow,kcol)
          end do
       end do
    end do
  end function dmatmul_csr_csr