Main Page | Modules | Namespace List | Class Hierarchy | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

FFPACK Class Reference
[linbox/ffpack]

#include <ffpack.h>

Inheritance diagram for FFPACK:

FFLAS

Detailed Description

Set of elimination based routines for dense linear algebra with matrices over finite prime field of characteristic less than 2^26.

This class only provides a set of static member functions. No instantiation is allowed.

It enlarges the set of BLAS routines of the class FFLAS, with higher level routines based on elimination.


Public Types

enum  FFPACK_LUDIVINE_TAG { FfpackLQUP = 1, FfpackSingular = 2, FfpackLSP = 3, FfpackTURBO = 4 }
enum  FFPACK_CHARPOLY_TAG {
  FfpackLUK = 1, FfpackKG = 2, FfpackHybrid = 3, FfpackKGFast = 4,
  FfpackHybrid2 = 5
}
enum  FFPACK_MINPOLY_TAG { FfpackDense = 1, FfpackKGF = 2 }

Static Public Member Functions

template<class Field> size_t Rank (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
template<class Field> bool IsSingular (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
 using rank computation with early termination.

template<class Field> Field::Element Det (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
 using LQUP factorization with early termination.

template<class Field> Field::ElementSolve (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *x, const int incx, const typename Field::Element *b, const int incb)
 Solve linear system using LQUP factorization.

template<class Field> Field::ElementInvert (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, int &nullity)
template<class Field> Field::ElementInvert2 (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, int &nullity)
template<class Field> Field::ElementLQUPtoInverseOfFullRankMinor (const Field &F, const size_t rank, typename Field::Element *A_factors, const size_t lda, const size_t *QtPointer, typename Field::Element *X, const size_t ldx)
template<class Field> size_t TURBO (const Field &F, const size_t M, const size_t N, typename Field::Element *NW, const size_t ld1, typename Field::Element *NE, const size_t ld2, typename Field::Element *SW, const size_t ld3, typename Field::Element *SE, const size_t ld4)
template<class Field> size_t LUdivine (const Field &F, const enum FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, const enum FFPACK_LUDIVINE_TAG LuTag=FfpackLQUP, size_t *rowP=NULL)
template<class Field> void applyP (const Field &F, const enum FFLAS_SIDE Side, const enum FFLAS_TRANSPOSE Trans, const size_t M, const int ibeg, const int iend, typename Field::Element *A, const size_t lda, const size_t *P)
template<class Field, class Polynomial> std::list< Polynomial > & CharPoly (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, const enum FFPACK_CHARPOLY_TAG CharpTag=FfpackHybrid)
template<class Field, class Polynomial> PolynomialMinPoly (const Field &F, Polynomial &minP, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, size_t *P, const enum FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field> void solveLB (const Field &F, const enum FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, typename Field::Element *L, const size_t ldl, const size_t *Q, typename Field::Element *B, const size_t ldb)
template<class Field> void solveLB2 (const Field &F, const enum FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, typename Field::Element *L, const size_t ldl, const size_t *Q, typename Field::Element *B, const size_t ldb)
template<class Field> void trinv_left (const Field &F, const size_t N, const typename Field::Element *L, const size_t ldl, typename Field::Element *X, const size_t ldx)

Static Protected Member Functions

template<class Field> void invL (const Field &F, const size_t N, const typename Field::Element *L, const size_t ldl, typename Field::Element *X, const size_t ldx)
template<class Field> size_t newD (const Field &F, size_t *d, bool &KeepOn, const size_t l, const size_t N, typename Field::Element *X, const size_t *Q, std::vector< std::vector< typename Field::Element > > &minpt)
template<class Field> size_t updateD (const Field &F, size_t *d, size_t k, std::vector< std::vector< typename Field::Element > > &minpt)
template<class Field> void TriangleCopy (const Field &F, const enum FFLAS_UPLO Side, const enum FFLAS_DIAG Diag, const size_t R, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopy (const Field &F, const size_t M, const size_t N, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopy2 (const Field &F, const size_t M, const size_t N, const long dist2pivot, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopyTURBO (const Field &F, const size_t M, const size_t N, const size_t dist2pivot, const size_t rank, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> size_t LUdivine_construct (const Field &F, const enum FFLAS_DIAG Diag, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, typename Field::Element *u, size_t *P, bool computeX, const enum FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field, class Polynomial> std::list< Polynomial > & KellerGehrig (const Field &F, std::list< Polynomial > &charp, const size_t N, const typename Field::Element *A, const size_t lda)
template<class Field, class Polynomial> int KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, size_t *kg_mc, size_t *kg_mc, size_t *kg_j)
template<class Field> void fgemv_kgf (const Field &F, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *X, const size_t incX, typename Field::Element *Y, const size_t incY, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field, class Polynomial> std::list< Polynomial > & LUKrylov (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *U, const size_t ldu, const enum FFPACK_CHARPOLY_TAG CharpTag)
template<class Field, class Polynomial> std::list< Polynomial > & LUKrylov_KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx)


Member Enumeration Documentation

enum FFPACK_LUDIVINE_TAG
 

Enumeration values:
FfpackLQUP 
FfpackSingular 
FfpackLSP 
FfpackTURBO 

enum FFPACK_CHARPOLY_TAG
 

Enumeration values:
FfpackLUK 
FfpackKG 
FfpackHybrid 
FfpackKGFast 
FfpackHybrid2 

enum FFPACK_MINPOLY_TAG
 

Enumeration values:
FfpackDense 
FfpackKGF 


Member Function Documentation

size_t Rank const Field F,
const size_t  M,
const size_t  N,
typename Field::Element A,
const size_t  lda
[inline, static]
 

Computes the rank of the given matrix using a LQUP factorization. The input matrix is modified.

Parameters:
M row dimension of the matrix
N column dimension of the matrix
A input matrix
lda leading dimension of A

bool IsSingular const Field F,
const size_t  M,
const size_t  N,
typename Field::Element A,
const size_t  lda
[inline, static]
 

using rank computation with early termination.

Field::Element Det const Field F,
const size_t  M,
const size_t  N,
typename Field::Element A,
const size_t  lda
[inline, static]
 

using LQUP factorization with early termination.

Field::Element* Solve const Field F,
const size_t  M,
typename Field::Element A,
const size_t  lda,
typename Field::Element x,
const int  incx,
const typename Field::Element b,
const int  incb
[inline, static]
 

Solve linear system using LQUP factorization.

Field::Element* Invert const Field F,
const size_t  M,
typename Field::Element A,
const size_t  lda,
typename Field::Element X,
const size_t  ldx,
int &  nullity
[inline, static]
 

Field::Element* Invert2 const Field F,
const size_t  M,
typename Field::Element A,
const size_t  lda,
typename Field::Element X,
const size_t  ldx,
int &  nullity
[inline, static]
 

Field::Element* LQUPtoInverseOfFullRankMinor const Field F,
const size_t  rank,
typename Field::Element A_factors,
const size_t  lda,
const size_t *  QtPointer,
typename Field::Element X,
const size_t  ldx
[inline, static]
 

LQUPtoInverseOfFullRankMinor Suppose A has been factorized as L.Q.U.P, with rank r. Then Qt.A.Pt has an invertible leading principal r x r submatrix This procedure efficiently computes the inverse of this minor and puts it into X. NOTE: It changes the lower entries of A_factors in the process (NB: unless A was nonsingular and square)

Parameters:
rank: rank of the matrix.
A_factors: matrix containing the L and U entries of the factorization
QtPointer: theLQUP->getQ()->getPointer() (note: getQ returns Qt!)
X: desired location for output

size_t TURBO const Field F,
const size_t  M,
const size_t  N,
typename Field::Element NW,
const size_t  ld1,
typename Field::Element NE,
const size_t  ld2,
typename Field::Element SW,
const size_t  ld3,
typename Field::Element SE,
const size_t  ld4
[static]
 

size_t LUdivine const Field F,
const enum FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
typename Field::Element A,
const size_t  lda,
size_t *  P,
const enum FFPACK_LUDIVINE_TAG  LuTag = FfpackLQUP,
size_t *  rowP = NULL
[static]
 

void applyP const Field F,
const enum FFLAS_SIDE  Side,
const enum FFLAS_TRANSPOSE  Trans,
const size_t  M,
const int  ibeg,
const int  iend,
typename Field::Element A,
const size_t  lda,
const size_t *  P
[inline, static]
 

std::list<Polynomial>& CharPoly const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element A,
const size_t  lda,
const enum FFPACK_CHARPOLY_TAG  CharpTag = FfpackHybrid
[static]
 

Polynomial& MinPoly const Field F,
Polynomial minP,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
typename Field::Element X,
const size_t  ldx,
size_t *  P,
const enum FFPACK_MINPOLY_TAG  MinTag,
const size_t  kg_mc,
const size_t  kg_mb,
const size_t  kg_j
[static]
 

void solveLB const Field F,
const enum FFLAS_SIDE  Side,
const size_t  M,
const size_t  N,
const size_t  R,
typename Field::Element L,
const size_t  ldl,
const size_t *  Q,
typename Field::Element B,
const size_t  ldb
[inline, static]
 

void solveLB2 const Field F,
const enum FFLAS_SIDE  Side,
const size_t  M,
const size_t  N,
const size_t  R,
typename Field::Element L,
const size_t  ldl,
const size_t *  Q,
typename Field::Element B,
const size_t  ldb
[inline, static]
 

void trinv_left const Field F,
const size_t  N,
const typename Field::Element L,
const size_t  ldl,
typename Field::Element X,
const size_t  ldx
[inline, static]
 

void invL const Field F,
const size_t  N,
const typename Field::Element L,
const size_t  ldl,
typename Field::Element X,
const size_t  ldx
[inline, static, protected]
 

size_t newD const Field F,
size_t *  d,
bool &  KeepOn,
const size_t  l,
const size_t  N,
typename Field::Element X,
const size_t *  Q,
std::vector< std::vector< typename Field::Element > > &  minpt
[static, protected]
 

size_t updateD const Field F,
size_t *  d,
size_t  k,
std::vector< std::vector< typename Field::Element > > &  minpt
[static, protected]
 

void TriangleCopy const Field F,
const enum FFLAS_UPLO  Side,
const enum FFLAS_DIAG  Diag,
const size_t  R,
typename Field::Element T,
const size_t  ldt,
const typename Field::Element A,
const size_t  lda
[inline, static, protected]
 

void RectangleCopy const Field F,
const size_t  M,
const size_t  N,
typename Field::Element T,
const size_t  ldt,
const typename Field::Element A,
const size_t  lda
[inline, static, protected]
 

void RectangleCopy2 const Field F,
const size_t  M,
const size_t  N,
const long  dist2pivot,
typename Field::Element T,
const size_t  ldt,
const typename Field::Element A,
const size_t  lda
[inline, static, protected]
 

void RectangleCopyTURBO const Field F,
const size_t  M,
const size_t  N,
const size_t  dist2pivot,
const size_t  rank,
typename Field::Element T,
const size_t  ldt,
const typename Field::Element A,
const size_t  lda
[inline, static, protected]
 

size_t LUdivine_construct const Field F,
const enum FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
typename Field::Element X,
const size_t  ldx,
typename Field::Element u,
size_t *  P,
bool  computeX,
const enum FFPACK_MINPOLY_TAG  MinTag,
const size_t  kg_mc,
const size_t  kg_mb,
const size_t  kg_j
[static, protected]
 

std::list<Polynomial>& KellerGehrig const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
const typename Field::Element A,
const size_t  lda
[static, protected]
 

int KGFast const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element A,
const size_t  lda,
size_t *  kg_mc,
size_t *  kg_mc,
size_t *  kg_j
[static, protected]
 

void fgemv_kgf const Field F,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element X,
const size_t  incX,
typename Field::Element Y,
const size_t  incY,
const size_t  kg_mc,
const size_t  kg_mb,
const size_t  kg_j
[static, protected]
 

std::list<Polynomial>& LUKrylov const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element A,
const size_t  lda,
typename Field::Element U,
const size_t  ldu,
const enum FFPACK_CHARPOLY_TAG  CharpTag
[static, protected]
 

std::list<Polynomial>& LUKrylov_KGFast const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element A,
const size_t  lda,
typename Field::Element X,
const size_t  ldx
[static, protected]
 


Generated on Fri Jul 8 10:29:51 2005 for linbox by doxygen 1.3.7