!-----------------------------------------------------------------------------------------------
SUBROUTINE KRON(K, A, B)
IMPLICIT NONE
REAL, INTENT(IN) :: A(:,:), B(:,:)
REAL, INTENT(INOUT) :: K(:,:)
INTEGER :: I, J, MA, NA, MB, NB
MA = UBOUND(A, 1)
NA = UBOUND(A, 2)
MB = UBOUND(B, 1)
NB = UBOUND(B, 2)
IF (SIZE(K,1) /= MA*MB .OR. SIZE(K,2) /= NA*NB) THEN
WRITE(*,*) 'K has invalid size'
CALL ABORT
END IF
FORALL(I=1:MA, J=1:NA)
K(MB*(I-1)+1:MB*I,NB*(J-1)+1:NB*J) = A(I,J)*B
END FORALL
END SUBROUTINE KRON
!----------------------------------------------------------------------------------------------------------------