00001
00002
00003 #ifndef _SKYLINEMTX_H__
00004 #define _SKYLINEMTX_H__
00005
00006 #include "SparseMatrixF.h"
00007 #include "Ordering.h"
00008 #include "BigMatrix.h"
00009
00010 DSS_NAMESPASE_BEGIN
00011
00012
00013
00014
00015 class SkyLineMtx :
00016 public TraceableMatrix,
00017 public ILargeMatrix
00018 {
00019 public:
00020 SkyLineMtx(SparseMatrixF& sm,Ordering* order,MathTracer* eMT);
00021 virtual ~SkyLineMtx();
00022
00023 public:
00024 int* column_starts;
00025 double* columndata;
00026 double* D;
00027 Ordering* order;
00028
00029 protected:
00030 long n;
00031 long nonzeros;
00032
00033 void GrowSkyline(int i, int j,long* column_ns);
00034 void AllocateMemory(IConectMatrix* spm,int neq);
00035
00036 public:
00037 long N() const {return n;}
00038 long Nonzeros() const {return (long)columns_data_length;}
00039
00040
00041 long columns_data_length;
00042
00043
00044 virtual void WriteStatistics(long no_init_blocks,long no_nonzeros);
00045 virtual long No_Multiplications() {return 0;}
00046
00047 virtual void Solve(double* b, double* x) = 0;
00048
00049
00050
00051
00052
00053 virtual void Factorize() = 0;
00054
00055
00056 public:
00057 virtual void SchurComplementFactorization(int fixed_blocks) = 0;
00058 virtual void SolveA11(double* x,long fixed_blocks) = 0;
00059 virtual void Sub_A21_A11inv(double* x,long fixed_blocks) = 0;
00060 virtual void Sub_A11inv_A12(double* x,long fixed_blocks) = 0;
00061 virtual void WriteCondensedMatrixA22(double* a,Ordering* mcn,IntArrayList* lncn) = 0;
00062
00063 };
00064
00065 DSS_NAMESPASE_END
00066
00067 #endif// _SKYLINEMTX_H__