Невозможно умножить неквадратные матрицы на себя. Вы должны транспонировать один из них.
Вы также смешиваете реалы и целые числа. Ваши матрицы должны быть реальными, а ваш результат - целым числом.
Можно ссылаться на матрицу с помощью небольшого хака FORTRAN STYLE (эквивалентность и последовательность, при условии, что для целочисленного и действительного значений по умолчанию используется одинаковый объем памяти). Этот компилирует:))))
type mytype
!!!
sequence
integer :: b(3,3)
real :: c(4)
endtype
integer :: a(3,3)
real :: d(4,4)
type(mytype) :: mat(2)
real,dimension(13,2) :: newmat
!!!
equivalence (mat,newmat)
!do stuff so that 'mat' gets values
! ....
!usually one does this
a = matmul(mat(1)%b, mat(2)%b)
!multiplying two 3x3 matrices
!but how does one do this? Note the "array"
d = matmul(reshape(newmat(10:13,:),(/4,2/)),transpose(reshape(newmat(10:13,:),(/4,2/))))
end