diff --git a/mex/build/matlab/mex.am b/mex/build/matlab/mex.am index 4169adbad..d4307e3bb 100644 --- a/mex/build/matlab/mex.am +++ b/mex/build/matlab/mex.am @@ -33,9 +33,15 @@ clean-local: %.o: %.F08 $(AM_V_FC)$(FCCOMPILE) $(DEFS) -c -o $@ $< -# Rules for the Fortran 2008 interface to MEX functions +# Rules for the Fortran 2008 interface to MEX and BLAS/LAPACK functions matlab_mat.mod: matlab_mex.o matlab_mex.mod: matlab_mex.o matlab_mex.F08: $(top_srcdir)/../../sources/matlab_mex.F08 $(LN_S) -f $< $@ + +blas.mod: blas_lapack.o +lapack.mod: blas_lapack.o + +blas_lapack.F08: $(top_srcdir)/../../sources/blas_lapack.F08 + $(LN_S) -f $< $@ diff --git a/mex/build/octave/mex.am b/mex/build/octave/mex.am index 86bf284d1..f98d1781a 100644 --- a/mex/build/octave/mex.am +++ b/mex/build/octave/mex.am @@ -40,9 +40,15 @@ clean-local: %.o: %.F08 $(AM_V_FC)$(FCCOMPILE) $(DEFS) -c -o $@ $< -# Rules for the Fortran 2008 interface to MEX functions +# Rules for the Fortran 2008 interface to MEX and BLAS/LAPACK functions matlab_mat.mod: matlab_mex.o matlab_mex.mod: matlab_mex.o matlab_mex.F08: $(top_srcdir)/../../sources/matlab_mex.F08 $(LN_S) -f $< $@ + +blas.mod: blas_lapack.o +lapack.mod: blas_lapack.o + +blas_lapack.F08: $(top_srcdir)/../../sources/blas_lapack.F08 + $(LN_S) -f $< $@ diff --git a/mex/sources/blas_lapack.F08 b/mex/sources/blas_lapack.F08 new file mode 100644 index 000000000..440e10513 --- /dev/null +++ b/mex/sources/blas_lapack.F08 @@ -0,0 +1,52 @@ +! Copyright © 2019 Dynare Team +! +! This file is part of Dynare. +! +! Dynare is free software: you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! Dynare is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with Dynare. If not, see . + +module blas + use iso_fortran_env + +#if defined(MATLAB_MEX_FILE) && __SIZEOF_POINTER__ == 8 + integer, parameter :: blint = int64 +#else + integer, parameter :: blint = int32 +#endif + + interface + subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy) + import :: blint, real64 + character :: trans + integer(blint), intent(in) :: m, n, lda, incx, incy + real(real64), dimension(*), intent(in) :: a, x + real(real64), intent(in) :: alpha, beta + real(real64), dimension(*), intent(inout) :: y + end subroutine dgemv + end interface +end module blas + +module lapack + use blas + + interface + subroutine dgesv(n, nrhs, a, lda, ipiv, b, ldb, info) + import :: blint, real64 + integer(blint), intent(in) :: n, nrhs, lda, ldb + real(real64), dimension(*), intent(inout) :: a + real(real64), dimension(*), intent(inout) :: b + integer(blint), dimension(*), intent(out) :: ipiv + integer(blint), intent(out) :: info + end subroutine dgesv + end interface +end module lapack