zmatmul_csr_csr Function

public function zmatmul_csr_csr(A, B)

Arguments

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

Return Value real


Calls

proc~~zmatmul_csr_csr~~CallsGraph proc~zmatmul_csr_csr zmatmul_csr_csr none~init~2 sparse_zmatrix_csr%init proc~zmatmul_csr_csr->none~init~2 none~insert~2 sparse_zmatrix_csr%insert proc~zmatmul_csr_csr->none~insert~2 interface~append append none~insert~2->interface~append proc~binary_search binary_search none~insert~2->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~~zmatmul_csr_csr~~CalledByGraph proc~zmatmul_csr_csr zmatmul_csr_csr interface~matmul~2 matmul interface~matmul~2->proc~zmatmul_csr_csr

Source Code

  function zmatmul_csr_csr(A,B) return(AxB)
    type(sparse_zmatrix_csr), intent(in) :: A,B
    type(sparse_zmatrix_csr)             :: AxB
    integer                              :: Na(2),Nb(2)
    integer                              :: irow,j,jcol,k,kcol
    complex(8)                           :: aval,bval
    
    Na = A%shape(); Nb = B%shape()
    if(Na(2)/=Nb(1))stop "Matrix not matching dimension in zmatmul_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 zmatmul_csr_csr