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