00001 #if !defined(__DSDP_SCHURMATRIXOPERATIONS_H)
00002 #define __DSDP_SCHURMATRIXOPERATIONS_H
00003
00010 #include "dsdpvec.h"
00011 #include "dsdpbasictypes.h"
00012 #include "dsdpcg.h"
00013
00014
00015 typedef struct {
00016 int *var;
00017 int nvars;
00018 int nmaxvars;
00019 double *fval;
00020 double *fdual;
00021 double *xout;
00022 } FixedVariables;
00023
00024 typedef struct {
00025 FixedVariables fv;
00026 DSDPVec rhs3,dy3;
00027 double dd,r;
00028 int m;
00029 } DSDPSchurInfo;
00030
00036 struct DSDPSchurMat_C{
00037 void* data;
00038 struct DSDPSchurMat_Ops *dsdpops;
00039 DSDPSchurInfo* schur;
00040 };
00041
00050 typedef struct DSDPSchurMat_C DSDPSchurMat;
00051
00052 extern int DSDPSchurMatSetData(DSDPSchurMat*,struct DSDPSchurMat_Ops*, void*);
00053
00054 extern int DSDPSchurMatInitialize(DSDPSchurMat*);
00055 extern int DSDPSchurMatSetup(DSDPSchurMat, DSDPVec);
00056 extern int DSDPSchurMatZeroEntries(DSDPSchurMat);
00057 extern int DSDPSchurMatInParallel(DSDPSchurMat, DSDPTruth*);
00058 extern int DSDPSchurMatShiftDiagonal(DSDPSchurMat, double);
00059 extern int DSDPSchurMatAssemble(DSDPSchurMat);
00060 extern int DSDPSchurMatMultiply(DSDPSchurMat, DSDPVec, DSDPVec);
00061 extern int DSDPSchurMatMultR(DSDPSchurMat, DSDPVec, DSDPVec);
00062 extern int DSDPSchurMatReducePVec(DSDPSchurMat, DSDPVec);
00063 extern int DSDPSchurMatFactor(DSDPSchurMat,DSDPTruth*);
00064 extern int DSDPSchurMatSolve(DSDPSchurMat, DSDPVec, DSDPVec);
00065 extern int DSDPSchurMatDestroy(DSDPSchurMat*);
00066 extern int DSDPSchurMatView(DSDPSchurMat);
00067 extern int DSDPSchurMatSetR(DSDPSchurMat, double);
00068
00069 extern int DSDPSchurMatRowColumnScaling(DSDPSchurMat,int, DSDPVec,int*);
00070 extern int DSDPSchurMatAddRow(DSDPSchurMat, int, double, DSDPVec);
00071
00072 extern int DSDPSchurMatVariableCompute(DSDPSchurMat, int, double*);
00073 extern int DSDPSchurMatVariableComputeC(DSDPSchurMat, double*);
00074 extern int DSDPSchurMatVariableComputeR(DSDPSchurMat, double*);
00075 extern int DSDPSchurMatAddDiagonalElement(DSDPSchurMat, int, double);
00076 extern int DSDPSchurMatAddC(DSDPSchurMat,int,double);
00077 extern int DSDPSchurMatAddR(DSDPSchurMat,int,double);
00078
00079 extern int DSDPSchurMatDiagonalScaling(DSDPSchurMat, DSDPVec);
00080 extern int DSDPSchurMatAddDiagonal(DSDPSchurMat, DSDPVec);
00081
00082 extern int DSDPSchurMatRowScaling(DSDPSchurMat, DSDPVec);
00083
00084 extern int DSDPZeroFixedVariables( DSDPSchurMat, DSDPVec);
00085 extern int DSDPApplyFixedVariables( DSDPSchurMat, DSDPVec);
00086 extern int DSDPIsFixed( DSDPSchurMat, int, DSDPTruth*);
00087 extern int DSDPInitializeFixedVariable( FixedVariables *);
00088 extern int DSDPAddFixedVariable( DSDPSchurMat, int, double);
00089
00090 #endif
00091
00092