I have written a small function about multiplication of matrices in blocks. However I was wondering if there is a more efficient way
subroutine blocks(a, b, c, blocksize)
real(kind=dp), dimension(:,:), intent(in) :: a, b
real(kind=dp), dimension(:,:), intent(out) :: c
integer, intent(in) :: blocksize
integer :: i,j,k,ii,jj,kk,n
c = 0.0_dp
n = size(a,1)
do jj=1,n,blocksize
do kk=1,n,blocksize
do ii=1,n,blocksize
do j=jj,min(jj+blocksize-1,n)
do k=kk,min(kk+blocksize-1,n)
do i=ii,min(ii+blocksize-1,n)
c(i,j) = c(i,j) + a(i,k)*b(k,j)
end do
end do
end do
end do
end do
end do
end subroutine blocks