Files
2026-08-03 18:42:47 +08:00

65 lines
1.4 KiB
C++

#ifndef TNT_LAPACK_HPP
#define TNT_LAPACK_HPP
extern "C"
{
#include "f2c.h"
#include "clapack.h"
}
/**
This file is an exmaple of how one integrates TNT arrays with external libraries.
C-Lapack is a translation of the LAPACK Fortran code into C. This package contains
methods for solving linear systems of equations and eigenvalue problems.
Lapack_LinearSolve() calls one of the C-Lapack drivers to solve the equation
AX = B, where A and B are given. The function returns X as the solution.
To compile and link this file, you NEED the C-Lapack library installed.
See http://www.netlib.org/clapack/ for details. In particular, your
link needs to include LAPACK library, as well as the BLAS library,
TMGLIB and libF77.a library of F2C.
*/
namespace TNT
{
Fortran_Array2D<double> Lapack_LinearSolve( const Fortran_Array2D<double> &A,
const Fortran_Array2D<double> &B)
{
integer m = A.dim1();
integer n = A.dim2();
if (m != n)
return Fortran_Array2D<double>();
integer nrhs = B.dim2();
if (n != B.dim1())
return Fortran_Array2D<double>();
Fortran_Array2D<double> X(B.copy());
Fortran_Array2D<double> lu(A.copy());
Fortran_Array1D<integer> ipiv(m, integer(0));
integer info=0;
dgesv_( &n, &nrhs, &lu(1,1), &m, &ipiv(1), &X(1,1), &n, &info);
return X;
}
}
#endif
// TNT_LAPACK_HPP