00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef dbl___QS_FACTOR_H_
00025 #define dbl___QS_FACTOR_H_
00026 #include "basicdefs.h"
00027 #include "econfig.h"
00028 #include "dbl_dstruct.h"
00029
00030 typedef char dbl_QSbool;
00031
00032 typedef struct dbl_uc_info
00033 {
00034 int cbeg;
00035 int nzcnt;
00036 int next;
00037 int prev;
00038 int delay;
00039 }
00040 dbl_uc_info;
00041
00042 typedef struct dbl_ur_info
00043 {
00044 double max;
00045 int rbeg;
00046 int nzcnt;
00047 int pivcnt;
00048 int next;
00049 int prev;
00050 int delay;
00051 }
00052 dbl_ur_info;
00053
00054 typedef struct dbl_lc_info
00055 {
00056 int cbeg;
00057 int nzcnt;
00058 int c;
00059 int crank;
00060 int delay;
00061 }
00062 dbl_lc_info;
00063
00064 typedef struct dbl_lr_info
00065 {
00066 int rbeg;
00067 int nzcnt;
00068 int r;
00069 int rrank;
00070 int delay;
00071 }
00072 dbl_lr_info;
00073
00074 typedef struct dbl_er_info
00075 {
00076 int rbeg;
00077 int nzcnt;
00078 int r;
00079 }
00080 dbl_er_info;
00081
00082 typedef struct dbl_factor_work
00083 {
00084 int max_k;
00085 double fzero_tol;
00086 double szero_tol;
00087 double partial_tol;
00088 double ur_space_mul;
00089 double uc_space_mul;
00090 double lc_space_mul;
00091 double lr_space_mul;
00092 double er_space_mul;
00093 double grow_mul;
00094 int p;
00095 int etamax;
00096 double minmult;
00097 double maxmult;
00098 double updmaxmult;
00099 double dense_fract;
00100 int dense_min;
00101
00102 double maxelem_orig;
00103 int nzcnt_orig;
00104 double maxelem_factor;
00105 int nzcnt_factor;
00106 double maxelem_cur;
00107 int nzcnt_cur;
00108
00109 double partial_cur;
00110
00111 int dim;
00112 int stage;
00113 int nstages;
00114 int etacnt;
00115 double *work_coef;
00116 int *work_indx;
00117 dbl_uc_info *uc_inf;
00118 dbl_ur_info *ur_inf;
00119 dbl_lc_info *lc_inf;
00120 dbl_lr_info *lr_inf;
00121 dbl_er_info *er_inf;
00122 int *ucindx;
00123 int *ucrind;
00124 double *uccoef;
00125 int *urindx;
00126 int *urcind;
00127 double *urcoef;
00128 int *lcindx;
00129 double *lccoef;
00130 int *lrindx;
00131 double *lrcoef;
00132 int *erindx;
00133 double *ercoef;
00134 int *rperm;
00135 int *rrank;
00136 int *cperm;
00137 int *crank;
00138 dbl_svector xtmp;
00139 int ur_freebeg;
00140 int ur_space;
00141 int uc_freebeg;
00142 int uc_space;
00143 int lc_freebeg;
00144 int lc_space;
00145 int lr_freebeg;
00146 int lr_space;
00147 int er_freebeg;
00148 int er_space;
00149
00150 int *p_nsing;
00151 int **p_singr;
00152 int **p_singc;
00153
00154 double *dmat;
00155 int drows;
00156 int dcols;
00157 int dense_base;
00158 }
00159 dbl_factor_work;
00160
00161 void dbl_ILLfactor_init_factor_work (
00162 dbl_factor_work * f),
00163 dbl_ILLfactor_free_factor_work (
00164 dbl_factor_work * f),
00165 dbl_ILLfactor_ftran (
00166 dbl_factor_work * f,
00167 dbl_svector * a,
00168 dbl_svector * x),
00169 dbl_ILLfactor_ftran_update (
00170 dbl_factor_work * f,
00171 dbl_svector * a,
00172 dbl_svector * upd,
00173 dbl_svector * x),
00174 dbl_ILLfactor_btran (
00175 dbl_factor_work * f,
00176 dbl_svector * a,
00177 dbl_svector * x);
00178
00179 int dbl_ILLfactor_create_factor_work (
00180 dbl_factor_work * f,
00181 int dim),
00182 dbl_ILLfactor_set_factor_iparam (
00183 dbl_factor_work * f,
00184 int param,
00185 int val),
00186 dbl_ILLfactor_set_factor_dparam (
00187 dbl_factor_work * f,
00188 int param,
00189 double val),
00190 dbl_ILLfactor (
00191 dbl_factor_work * f,
00192 int *basis,
00193 int *cbeg,
00194 int *clen,
00195 int *cindx,
00196 double * ccoef,
00197 int *p_nsing,
00198 int **p_singr,
00199 int **p_singc),
00200 dbl_ILLfactor_update (
00201 dbl_factor_work * f,
00202 dbl_svector * a,
00203 int col,
00204 int *p_refact);
00205
00206 #endif