library: libMatrix #include "TDecompSparse.h"

# TDecompSparse

class description - source file - inheritance tree (.pdf)

## class TDecompSparse : public TDecompBase

| Inheritance Chart:
`TObject`
| <- | `TDecompBase`
| <- | `TDecompSparse` |

        protected:

                          static void CopyUpperTriang(const TMatrixDSparse& a, Double_t* b)
                                Int_t ErrorFlag()
                          static void Factor(const Int_t n, const Int_t nz, TArrayI& Airn, TArrayI& Aicn, TArrayD& Aa, TArrayI& Aiw, TArrayI& Aikeep, const Int_t nsteps, Int_t& maxfrt, TArrayI& Aiw1, Int_t* icntl, Double_t* cntl, Int_t* info)
                          static void Factor_sub1(const Int_t n, const Int_t nz, Int_t& nz1, Double_t* a, const Int_t la, Int_t* irn, Int_t* icn, Int_t* iw, const Int_t liw, Int_t* perm, Int_t* iw2, Int_t* icntl, Int_t* info)
                          static void Factor_sub2(const Int_t n, const Int_t nz, Double_t* a, const Int_t la, Int_t* iw, const Int_t liw, Int_t* perm, Int_t* nstk, const Int_t nsteps, Int_t& maxfrt, Int_t* nelim, Int_t* iw2, Int_t* icntl, Double_t* cntl, Int_t* info)
                          static void Factor_sub3(Double_t* a, Int_t* iw, Int_t& j1, Int_t& j2, const Int_t itop, const Int_t ireal, Int_t& ncmpbr, Int_t& ncmpbi)
          virtual const TMatrixDBase& GetDecompMatrix() const
                             Double_t GetThresholdPivoting()
                             Double_t GetTreatAsZero()
                         static Int_t IDiag(Int_t ix, Int_t iy)
                                Int_t IError()
                                 void InitParam()
                          static void InitPivot(const Int_t n, const Int_t nz, TArrayI& Airn, TArrayI& Aicn, TArrayI& Aiw, TArrayI& Aikeep, TArrayI& Aiw1, Int_t& nsteps, const Int_t iflag, Int_t* icntl, Double_t* cntl, Int_t* info, Double_t& ops)
                          static void InitPivot_sub1(const Int_t n, const Int_t nz, Int_t* irn, Int_t* icn, Int_t* iw, Int_t* ipe, Int_t* iq, Int_t* flag, Int_t& iwfr, Int_t* icntl, Int_t* info)
                          static void InitPivot_sub2(const Int_t n, Int_t* ipe, Int_t* iw, const Int_t lw, Int_t& iwfr, Int_t* nv, Int_t* nxt, Int_t* lst, Int_t* ipd, Int_t* flag, const Int_t iovflo, Int_t& ncmpa, const Double_t fratio)
                          static void InitPivot_sub2a(const Int_t n, Int_t* ipe, Int_t* iw, const Int_t lw, Int_t& iwfr, Int_t& ncmpa)
                          static void InitPivot_sub3(const Int_t n, const Int_t nz, Int_t* irn, Int_t* icn, Int_t* perm, Int_t* iw, Int_t* ipe, Int_t* iq, Int_t* flag, Int_t& iwfr, Int_t* icntl, Int_t* info)
                          static void InitPivot_sub4(const Int_t n, Int_t* ipe, Int_t* iw, const Int_t lw, Int_t& iwfr, Int_t* ips, Int_t* ipv, Int_t* nv, Int_t* flag, Int_t& ncmpa)
                          static void InitPivot_sub5(const Int_t n, Int_t* ipe, Int_t* nv, Int_t* ips, Int_t* ne, Int_t* na, Int_t* nd, Int_t& nsteps, const Int_t nemin)
                          static void InitPivot_sub6(const Int_t n, const Int_t nz, Int_t* irn, Int_t* icn, Int_t* perm, Int_t* na, Int_t* ne, Int_t* nd, const Int_t nsteps, Int_t* lstki, Int_t* lstkr, Int_t* iw, Int_t* info, Double_t& ops)
                                Int_t MinIntWorkspace()
                                Int_t MinRealWorkspace()
                         static Int_t NonZerosUpperTriang(const TMatrixDSparse& a)
                                 void SetThresholdPivoting(Double_t piv)
                                 void SetTreatAsZero(Double_t tol)
                          static void Solve(const Int_t n, TArrayD& Aa, TArrayI& Aiw, TArrayD& Aw, const Int_t maxfrt, TVectorD& b, TArrayI& Aiw1, const Int_t nsteps, Int_t* icntl, Int_t* info)
                          static void Solve_sub1(const Int_t n, Double_t* a, Int_t* iw, Double_t* w, Double_t* rhs, Int_t* iw2, const Int_t nblk, Int_t& latop, Int_t* icntl)
                          static void Solve_sub2(const Int_t n, Double_t* a, Int_t* iw, Double_t* w, Double_t* rhs, Int_t* iw2, const Int_t nblk, const Int_t latop, Int_t* icntl)

        public:

                           TDecompSparse()
                           TDecompSparse(Int_t nRows, Int_t nr_nonZeros, Int_t verbose)
                           TDecompSparse(Int_t row_lwb, Int_t row_upb, Int_t nr_nonZeros, Int_t verbose)
                           TDecompSparse(const TMatrixDSparse& a, Int_t verbose)
                           TDecompSparse(const TDecompSparse& another)
                   virtual ~TDecompSparse()
            static TClass* Class()
            virtual Bool_t Decompose()
              virtual void Det(Double_t&, Double_t&)
             virtual Int_t GetNcols() const
             virtual Int_t GetNrows() const
           virtual TClass* IsA() const
            TDecompSparse& operator=(const TDecompSparse& source)
              virtual void Print(Option_t* opt = "") const
              virtual void SetMatrix(const TMatrixDSparse& a)
                      void SetVerbose(Int_t v)
              virtual void ShowMembers(TMemberInspector& insp, char* parent)
            virtual Bool_t Solve(TVectorD& b)
          virtual TVectorD Solve(const TVectorD& b, Bool_t& ok)
            virtual Bool_t Solve(TMatrixDColumn&)
              virtual void Streamer(TBuffer& b)
                      void StreamerNVirtual(TBuffer& b)
            virtual Bool_t TransSolve(TVectorD& b)
          virtual TVectorD TransSolve(const TVectorD& b, Bool_t& ok)
            virtual Bool_t TransSolve(TMatrixDColumn&)

### Data Members

        protected:

                   Int_t fVerbose
                   Int_t fIcntl[31]   integer control numbers
                Double_t fCntl[6]     float control numbers
                   Int_t fInfo[21]    array used for communication between programs
                Double_t fPrecision   precision we demand from the linear system solver. If it isn't
                 TArrayI fIkeep       pivot sequence and temporary storage information
                 TArrayI fIw
                 TArrayI fIw1
                 TArrayI fIw2
                   Int_t fNsteps
                   Int_t fMaxfrt
                 TArrayD fW           temporary storage for the factorization
                Double_t fIPessimism  amounts by which to increase allocated factorization space when
                Double_t fRPessimism  inadequate space is detected. fIPessimism is for array "fIw",
          TMatrixDSparse fA           original matrix; needed for the iterative solving procedure
                   Int_t fNrows
                   Int_t fNnonZeros
                 TArrayD fFact        size of fFact array; may be increased during the numerical factorization
                 TArrayI fRowFact
                 TArrayI fColFact

## Class Description

     Sparse Symmetric Decomposition class

     Solve a sparse symmetric system of linear equations using a method
     based on Gaussian elimination as discussed in Duff and Reid,
     ACM Trans. Math. Software 9 (1983), 302-325.

TDecompSparse()

TDecompSparse(Int_t nRows,Int_t nr_nonZeros,Int_t verbose)

TDecompSparse(Int_t row_lwb,Int_t row_upb,Int_t nr_nonZeros,Int_t verbose)

TDecompSparse(const TMatrixDSparse &a,Int_t verbose)

TDecompSparse(const TDecompSparse &another) : TDecompBase(another)

Int_t NonZerosUpperTriang(const TMatrixDSparse &a)

void CopyUpperTriang(const TMatrixDSparse &a,Double_t *b)

void SetMatrix(const TMatrixDSparse &a)

Bool_t Decompose()

Bool_t Solve(TVectorD &b)

     Solve Ax=b . Solution returned in b.

void InitParam()

void InitPivot(const Int_t n,const Int_t nz,TArrayI &Airn,TArrayI &Aicn, TArrayI &Aiw,TArrayI &Aikeep,TArrayI &Aiw1,Int_t &nsteps, const Int_t iflag,Int_t *icntl,Double_t *cntl,Int_t *info, Double_t &ops)

void Factor(const Int_t n,const Int_t nz,TArrayI &Airn,TArrayI &Aicn,TArrayD &Aa, TArrayI &Aiw,TArrayI &Aikeep,const Int_t nsteps,Int_t &maxfrt, TArrayI &Aiw1,Int_t *icntl,Double_t *cntl,Int_t *info)

void Solve(const Int_t n,TArrayD &Aa,TArrayI &Aiw, TArrayD &Aw,const Int_t maxfrt,TVectorD &b,TArrayI &Aiw1, const Int_t nsteps,Int_t *icntl,Int_t *info)

void InitPivot_sub1(const Int_t n,const Int_t nz,Int_t *irn,Int_t *icn, Int_t *iw,Int_t *ipe,Int_t *iq,Int_t *flag, Int_t &iwfr,Int_t *icntl,Int_t *info)

void InitPivot_sub2(const Int_t n,Int_t *ipe,Int_t *iw,const Int_t lw, Int_t &iwfr,Int_t *nv,Int_t *nxt,Int_t *lst,Int_t *ipd, Int_t *flag,const Int_t iovflo,Int_t &ncmpa, const Double_t fratio)

void InitPivot_sub2a(const Int_t n,Int_t *ipe,Int_t *iw,const Int_t lw, Int_t &iwfr,Int_t &ncmpa)

void InitPivot_sub3(const Int_t n,const Int_t nz,Int_t *irn,Int_t *icn, Int_t *perm,Int_t *iw,Int_t *ipe,Int_t *iq, Int_t *flag,Int_t &iwfr,Int_t *icntl,Int_t *info)

void InitPivot_sub4(const Int_t n,Int_t *ipe,Int_t *iw,const Int_t lw, Int_t &iwfr,Int_t *ips,Int_t *ipv,Int_t *nv,Int_t *flag, Int_t &ncmpa)

void InitPivot_sub5(const Int_t n,Int_t *ipe,Int_t *nv,Int_t *ips,Int_t *ne, Int_t *na,Int_t *nd,Int_t &nsteps,const Int_t nemin)

void InitPivot_sub6(const Int_t n,const Int_t nz,Int_t *irn,Int_t *icn, Int_t *perm,Int_t *na,Int_t *ne,Int_t *nd,const Int_t nsteps, Int_t *lstki,Int_t *lstkr,Int_t *iw,Int_t *info,Double_t &ops)

void Factor_sub1(const Int_t n,const Int_t nz,Int_t &nz1,Double_t *a, const Int_t la,Int_t *irn,Int_t *icn,Int_t *iw,const Int_t liw, Int_t *perm,Int_t *iw2,Int_t *icntl,Int_t *info)

void Factor_sub2(const Int_t n,const Int_t nz,Double_t *a,const Int_t la, Int_t *iw,const Int_t liw,Int_t *perm,Int_t *nstk, const Int_t nsteps,Int_t &maxfrt,Int_t *nelim,Int_t *iw2, Int_t *icntl,Double_t *cntl,Int_t *info)

void Factor_sub3(Double_t *a,Int_t *iw,Int_t &j1,Int_t &j2,const Int_t itop, const Int_t ireal,Int_t &ncmpbr,Int_t &ncmpbi)

void Solve_sub1(const Int_t n,Double_t *a,Int_t *iw,Double_t *w, Double_t *rhs,Int_t *iw2,const Int_t nblk,Int_t &latop, Int_t *icntl)

void Solve_sub2(const Int_t n,Double_t *a,Int_t *iw,Double_t *w, Double_t *rhs,Int_t *iw2,const Int_t nblk, const Int_t latop,Int_t *icntl)

void Print(Option_t *opt) const

### Inline Functions

                           void ~TDecompSparse()
                          Int_t IDiag(Int_t ix, Int_t iy)
                          Int_t IError()
                          Int_t MinRealWorkspace()
                          Int_t MinIntWorkspace()
                          Int_t ErrorFlag()
                       Double_t GetThresholdPivoting()
                       Double_t GetTreatAsZero()
                           void SetThresholdPivoting(Double_t piv)
                           void SetTreatAsZero(Double_t tol)
            const TMatrixDBase& GetDecompMatrix() const
                           void SetVerbose(Int_t v)
                          Int_t GetNrows() const
                          Int_t GetNcols() const
                       TVectorD Solve(const TVectorD& b, Bool_t& ok)
                         Bool_t Solve(TMatrixDColumn&)
                         Bool_t TransSolve(TVectorD& b)
                       TVectorD TransSolve(const TVectorD& b, Bool_t& ok)
                         Bool_t TransSolve(TMatrixDColumn&)
                           void Det(Double_t&, Double_t&)
                 TDecompSparse& operator=(const TDecompSparse& source)
                        TClass* Class()
                        TClass* IsA() const
                           void ShowMembers(TMemberInspector& insp, char* parent)
                           void Streamer(TBuffer& b)
                           void StreamerNVirtual(TBuffer& b)

Last update: root/matrix:$Name: $:$Id: TDecompSparse.cxx,v 1.10 2005/02/15 16:17:09 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *