SUBROUTINE MEXFUNCTION(NLHS, PLHS, NRHS, PRHS) IMPLICIT NONE INTEGER PLHS(*), PRHS(*) INTEGER NLHS, NRHS INTEGER MXCREATEFULL, MXGETPR INTEGER MXGETM, MXGETN integer M(2), N(2) real(8), allocatable :: A(:,:), B(:,:), C(:,:) IF (NRHS .NE. 2) THEN CALL MEXERRMSGTXT('abcg requires two input arguments') ELSEIF (NLHS .GT. 1) THEN CALL MEXERRMSGTXT('abcg requires one output argument') ENDIF M(1) = MXGETM(PRHS(1)) N(1) = MXGETN(PRHS(1)) M(2) = MXGETM(PRHS(2)) N(2) = MXGETN(PRHS(2)) ALLOCATE(A(M(1),N(1))) ALLOCATE(B(M(2),N(2))) ALLOCATE(C(M(1),N(2))) call mxcopyptrtoreal8(mxgetpr(prhs(1)),A,M(1)*N(1)) call mxcopyptrtoreal8(mxgetpr(prhs(2)),B,M(2)*N(2)) plhs(1) = mxcreatefull(M(1),N(2),0) C = matmul(A,B) CALL MXCOPYreal8TOPTR(C,mxgetpr(plhs(1)),M(1)*N(2)) RETURN END