FEMM/csolv/SPARS.H

65 lines
1.6 KiB
C++

/////////////////////////////////////////////////////////////////////
// for complex matrices......
class CComplexEntry
{
public:
CComplex x; // value stored in the entry
int c; // column that the entry lives in
CComplexEntry *next; // pointer to next entry in the row;
CComplexEntry();
private:
};
class CBigComplexLinProb
{
public:
// data members
BOOL *Q;
CComplex *P;
CComplex *U;
CComplex *R;
CComplex *V;
CComplex *Z;
CComplex *b; // RHS of linear equation
CComplexEntry **M; // pointer to list of matrix entries;
int n; // dimensions of the matrix;
int bdw; // optional bandwidth parameter;
int NumNodes;
double Precision;
CComplex Lambda;
// member functions
CBigComplexLinProb(); // constructor
~CBigComplexLinProb(); // destructor
int Create(int d, int bw, int nodes); // initialize the problem
void Put(CComplex v, int p, int q);
// use to create/set entries in the matrix
CComplex Get(int p, int q);
int PBCGSolve(int flag); // flag==true if guess for V present;
int QMRSolve(int flag);
void MultA(CComplex *X, CComplex *Y);
void MultConjA(CComplex *X, CComplex *Y);
CComplex Dot(CComplex *x, CComplex *y);
CComplex ConjDot(CComplex *x, CComplex *y);
void SetValue(int i, CComplex x);
void Periodicity(int i, int j);
void AntiPeriodicity(int i, int j);
void Wipe();
void MultPC(CComplex *X, CComplex *Y);
void MultAPPA(CComplex *X, CComplex *Y);
int PCGSQSolve(int flag);
int PCGSQStart(int flag);
int PBCGSolveMod(int flag);
CcsolvDlg *TheView;
private:
};