Mercurial > hg > octave-nkf
diff liboctave/floatLU.cc @ 7789:82be108cc558
First attempt at single precision tyeps
* * *
corrections to qrupdate single precision routines
* * *
prefer demotion to single over promotion to double
* * *
Add single precision support to log2 function
* * *
Trivial PROJECT file update
* * *
Cache optimized hermitian/transpose methods
* * *
Add tests for tranpose/hermitian and ChangeLog entry for new transpose code
author | David Bateman <dbateman@free.fr> |
---|---|
date | Sun, 27 Apr 2008 22:34:17 +0200 |
parents | |
children | 5420b8cf011a |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/liboctave/floatLU.cc @@ -0,0 +1,71 @@ +/* + +Copyright (C) 1994, 1995, 1996, 1997, 1999, 2002, 2003, 2004, 2005, + 2007 John W. Eaton + +This file is part of Octave. + +Octave 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. + +Octave 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 Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "floatLU.h" +#include "f77-fcn.h" +#include "lo-error.h" + +// Instantiate the base LU class for the types we need. + +#include <base-lu.h> +#include <base-lu.cc> + +template class base_lu <FloatMatrix, float, FloatMatrix, float>; + +// Define the constructor for this particular derivation. + +extern "C" +{ + F77_RET_T + F77_FUNC (sgetrf, SGETRF) (const octave_idx_type&, const octave_idx_type&, float*, + const octave_idx_type&, octave_idx_type*, octave_idx_type&); +} + +FloatLU::FloatLU (const FloatMatrix& a) +{ + octave_idx_type a_nr = a.rows (); + octave_idx_type a_nc = a.cols (); + octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); + + ipvt.resize (mn); + octave_idx_type *pipvt = ipvt.fortran_vec (); + + a_fact = a; + float *tmp_data = a_fact.fortran_vec (); + + octave_idx_type info = 0; + + F77_XFCN (sgetrf, SGETRF, (a_nr, a_nc, tmp_data, a_nr, pipvt, info)); + + ipvt -= static_cast<octave_idx_type> (1); +} + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/