00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef PKNUM_H
00014 #define PKNUM_H
00015
00016 #ifndef PKVARIA_H
00017 #include "pkvaria.h"
00018 #endif
00019
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023
00024
00025
00026 typedef struct bandm_profile {
00027 int firstnz;
00028
00029 int ind;
00030 } bandm_profile;
00031
00032 typedef struct {
00033 int i, j;
00034 } index2;
00035
00036 typedef struct {
00037 int i, j, k;
00038 } index3;
00039
00040 typedef struct { float x, y; } complexf;
00041 typedef struct { double x, y; } complexd;
00042
00043
00044 #define pkn_LowerTrMatIndex(i,j) \
00045 ( (i)*((i)+1)/2+(j) )
00046 #define pkn_SymMatIndex(i,j) \
00047 ( (i) >= (j) ? (i)*((i)+1)/2+(j) : (j)*((j)+1)/2+(i) )
00048 #define pkn_LHessenbergMatIndex(i,j) \
00049 (pkn_LowerTrMatIndex(((i)+1),(j))-1)
00050 #define pkn_UHessenbergMatIndex(i,j) \
00051 (pkn_LowerTrMatIndex(((j)+1),(i))-1)
00052
00053 #include "pknumf.h"
00054 #include "pknumd.h"
00055
00056
00057 void pkn_BandmFindQRMSizes ( int ncols, const bandm_profile *aprof,
00058 int *qsize, int *rsize );
00059
00060 void pkn_PrintProfile ( int ncols, const bandm_profile *prof );
00061
00062
00063 int pkn_Block1ArraySize ( int k, int r, int s );
00064 int pkn_Block1FindBlockPos ( int k, int r, int s, int i, int j );
00065 int pkn_Block1FindElemPos ( int k, int r, int s, int i, int j );
00066
00067
00068 int pkn_Block2ArraySize ( int k, int r, int s, int t );
00069 int pkn_Block2FindBlockPos ( int k, int r, int s, int t, int i, int j );
00070 int pkn_Block2FindElemPos ( int k, int r, int s, int t, int i, int j );
00071
00072
00073 int pkn_Block3ArraySize ( int k, int r, int s );
00074 int pkn_Block3FindBlockPos ( int k, int r, int s, int i, int j );
00075 int pkn_Block3FindElemPos ( int k, int r, int s, int i, int j );
00076
00077
00078 int pkn_NRBArraySize ( int n, const int *prof );
00079
00080
00081 int pkn_TMBSize ( int n );
00082 boolean pkn_TMBElem ( byte *bittm, int i, int j );
00083 void pkn_TMBElemSet ( byte *bittm, int i, int j );
00084 void pkn_TMBElemClear ( byte *bittm, int i, int j );
00085 boolean pkn_TMBTestAndSet ( byte *bittm, int i, int j );
00086 boolean pkn_TMBTestAndClear ( byte *bittm, int i, int j );
00087
00088
00089
00090 void pkn_SPMindex2to3 ( unsigned int nnz, index2 *ai, index3 *sai );
00091 void pkn_SPMindex3to2 ( unsigned int nnz, index3 *sai, index2 *ai );
00092
00093 boolean pkn_SPMSortByRows ( unsigned int nrows, unsigned int ncols,
00094 unsigned int nnz, index2 *ai, unsigned int *permut );
00095 boolean pkn_SPMSortByCols ( unsigned int nrows, unsigned int ncols,
00096 unsigned int nnz, index2 *ai, unsigned int *permut );
00097 boolean pkn_SPMFindRows ( unsigned int nrows, unsigned int ncols, unsigned int nnz,
00098 index2 *ai, unsigned int *permut, boolean ro,
00099 int *rows );
00100 boolean pkn_SPMFindCols ( unsigned int nrows, unsigned int ncols, unsigned int nnz,
00101 index2 *ai, unsigned int *permut, boolean co,
00102 int *cols );
00103
00104
00105 boolean pkn_SPMCountMMnnzR ( int nra, int nca, int ncb,
00106 unsigned int nnza, index2 *ai,
00107 unsigned int *apermut, int *arows, boolean ra,
00108 unsigned int nnzb, index2 *bi,
00109 unsigned int *bpermut, int *brows, boolean rb,
00110 unsigned int *nnzab, unsigned int *nmultab );
00111 boolean pkn_SPMFindMMnnzR ( int nra, int nca, int ncb,
00112 int unsigned nnza, index2 *ai,
00113 unsigned int *apermut, int *arows,
00114 unsigned int nnzb, index2 *bi,
00115 unsigned int *bpermut, int *brows,
00116 index2 *abi, int *abpos, index2 *aikbkj );
00117 boolean pkn_SPMCountMMnnzC ( int nra, int nca, int ncb,
00118 unsigned int nnza, index2 *ai,
00119 unsigned int *apermut, int *acols, boolean ca,
00120 unsigned int nnzb, index2 *bi,
00121 unsigned int *bpermut, int *bcols, boolean cb,
00122 unsigned int *nnzab, unsigned int *nmultab );
00123 boolean pkn_SPMFindMMnnzC ( int nra, int nca, int ncb,
00124 unsigned int nnza, index2 *ai,
00125 unsigned int *apermut, int *acols,
00126 unsigned int nnzb, index2 *bi,
00127 unsigned int *bpermut, int *bcols,
00128 index2 *abi, int *abpos, index2 *aikbkj );
00129
00130 boolean pkn_SPMCountMMTnnzR ( int nra, int nca, int nrb,
00131 unsigned int nnza, index2 *ai,
00132 unsigned int *apermut, int *arows, boolean ra,
00133 unsigned int nnzb, index2 *bi,
00134 unsigned int *bpermut, int *bcols, boolean cb,
00135 unsigned int *nnzab, unsigned int *nmultab );
00136 boolean pkn_SPMFindMMTnnzR ( int nra, int nca, int nrb,
00137 unsigned int nnza, index2 *ai,
00138 unsigned int *apermut, int *arows,
00139 unsigned int nnzb, index2 *bi,
00140 unsigned int *bpermut, int *bcols,
00141 index2 *abi, int *abpos, index2 *aikbkj );
00142 boolean pkn_SPMCountMMTnnzC ( int nra, int nca, int nrb,
00143 unsigned int nnza, index2 *ai,
00144 unsigned int *apermut, int *acols, boolean ca,
00145 unsigned int nnzb, index2 *bi,
00146 unsigned int *bpermut, int *brows, boolean rb,
00147 unsigned int *nnzab, unsigned int *nmultab );
00148 boolean pkn_SPMFindMMTnnzC ( int nra, int nca, int nrb,
00149 unsigned int nnza, index2 *ai,
00150 unsigned int *apermut, int *acols,
00151 unsigned int nnzb, index2 *bi,
00152 unsigned int *bpermut, int *brows,
00153 index2 *abi, int *abpos, index2 *aikbkj );
00154
00155 boolean pkn_SPMCountMTMnnzR ( int nra, int nca, int ncb,
00156 unsigned int nnza, index2 *ai,
00157 unsigned int *apermut, int *acols, boolean ca,
00158 unsigned int nnzb, index2 *bi,
00159 unsigned int *bpermut, int *brows, boolean rb,
00160 unsigned int *nnzab, unsigned int *nmultab );
00161 boolean pkn_SPMFindMTMnnzR ( int nra, int nca, int ncb,
00162 unsigned int nnza, index2 *ai,
00163 unsigned int *apermut, int *acols,
00164 unsigned int nnzb, index2 *bi,
00165 unsigned int *bpermut, int *brows,
00166 index2 *abi, int *abpos, index2 *aikbkj );
00167 boolean pkn_SPMCountMTMnnzC ( int nra, int nca, int ncb,
00168 unsigned int nnza, index2 *ai,
00169 unsigned int *apermut, int *arows, boolean ra,
00170 unsigned int nnzb, index2 *bi,
00171 unsigned int *bpermut, int *bcols, boolean cb,
00172 unsigned int *nnzab, unsigned int *nmultab );
00173 boolean pkn_SPMFindMTMnnzC ( int nra, int nca, int ncb,
00174 unsigned int nnza, index2 *ai,
00175 unsigned int *apermut, int *arows,
00176 unsigned int nnzb, index2 *bi,
00177 unsigned int *bpermut, int *bcols,
00178 index2 *abi, int *abpos, index2 *aikbkj );
00179
00180
00181
00182
00183
00184 boolean pkn_SPMmultMMCempty ( int nra, int nca, int ncb,
00185 unsigned int nnza, index2 *ai,
00186 unsigned int *apermut, int *acols, boolean ca,
00187 unsigned int nnzb, index2 *bi,
00188 unsigned int *bpermut, int *bcols, boolean cb,
00189 index2 *abi );
00190 boolean pkn_SPMmultMMTCempty ( int nra, int nca, int nrb,
00191 unsigned int nnza, index2 *ai,
00192 unsigned int *apermut, int *acols, boolean ca,
00193 unsigned int nnzb, index2 *bi,
00194 unsigned int *bpermut, int *brows, boolean rb,
00195 index2 *abi );
00196 boolean pkn_SPMmultMTMCempty ( int nra, int nca, int ncb,
00197 unsigned int nnza, index2 *ai,
00198 unsigned int *apermut, int *arows, boolean ra,
00199 unsigned int nnzb, index2 *bi,
00200 unsigned int *bpermut, int *bcols, boolean ba,
00201 index2 *abi );
00202
00203
00204
00205 boolean pkn_SPsubMSortByRows ( unsigned int nrows, unsigned int ncols,
00206 unsigned int nnz, index3 *ai, unsigned int *permut );
00207 boolean pkn_SPsubMSortByCols ( unsigned int nrows, unsigned int ncols,
00208 unsigned int nnz, index3 *ai, unsigned int *permut );
00209 boolean pkn_SPsubMFindRows ( unsigned int nrows, unsigned int ncols, unsigned int nnz,
00210 index3 *ai, unsigned int *permut, boolean ro,
00211 int *rows );
00212 boolean pkn_SPsubMFindCols ( unsigned int nrows, unsigned int ncols, unsigned int nnz,
00213 index3 *ai, unsigned int *permut, boolean co,
00214 int *cols );
00215
00216
00217 boolean pkn_SPsubMCountMMnnzR ( int nra, int nca, int ncb,
00218 unsigned int nnza, index3 *ai,
00219 unsigned int *apermut, int *arows, boolean ra,
00220 unsigned int nnzb, index3 *bi,
00221 unsigned int *bpermut, int *brows, boolean rb,
00222 unsigned int *nnzab, unsigned int *nmultab );
00223 boolean pkn_SPsubMFindMMnnzR ( int nra, int nca, int ncb,
00224 unsigned int nnza, index3 *ai,
00225 unsigned int *apermut, int *arows,
00226 unsigned int nnzb, index3 *bi,
00227 unsigned int *bpermut, int *brows,
00228 index2 *abi, int *abpos, index2 *aikbkj );
00229 boolean pkn_SPsubMCountMMnnzC ( int nra, int nca, int ncb,
00230 unsigned int nnza, index3 *ai,
00231 unsigned int *apermut, int *acols, boolean ca,
00232 unsigned int nnzb, index3 *bi,
00233 unsigned int *bpermut, int *bcols, boolean cb,
00234 unsigned int *nnzab, unsigned int *nmultab );
00235 boolean pkn_SPsubMFindMMnnzC ( int nra, int nca, int ncb,
00236 unsigned int nnza, index3 *ai,
00237 unsigned int *apermut, int *acols,
00238 unsigned int nnzb, index3 *bi,
00239 unsigned int *bpermut, int *bcols,
00240 index2 *abi, int *abpos, index2 *aikbkj );
00241
00242 boolean pkn_SPsubMCountMMTnnzR ( int nra, int nca, int nrb,
00243 unsigned int nnza, index3 *ai,
00244 unsigned int *apermut, int *arows, boolean ra,
00245 unsigned int nnzb, index3 *bi,
00246 unsigned int *bpermut, int *bcols, boolean cb,
00247 unsigned int *nnzab, unsigned int *nmultab );
00248 boolean pkn_SPsubMFindMMTnnzR ( int nra, int nca, int nrb,
00249 unsigned int nnza, index3 *ai,
00250 unsigned int *apermut, int *arows,
00251 unsigned int nnzb, index3 *bi,
00252 unsigned int *bpermut, int *bcols,
00253 index2 *abi, int *abpos, index2 *aikbkj );
00254 boolean pkn_SPsubMCountMMTnnzC ( int nra, int nca, int nrb,
00255 unsigned int nnza, index3 *ai,
00256 unsigned int *apermut, int *acols, boolean ca,
00257 unsigned int nnzb, index3 *bi,
00258 unsigned int *bpermut, int *brows, boolean rb,
00259 unsigned int *nnzab, unsigned int *nmultab );
00260 boolean pkn_SPsubMFindMMTnnzC ( int nra, int nca, int nrb,
00261 unsigned int nnza, index3 *ai,
00262 unsigned int *apermut, int *acols,
00263 unsigned int nnzb, index3 *bi,
00264 unsigned int *bpermut, int *brows,
00265 index2 *abi, int *abpos, index2 *aikbkj );
00266
00267 boolean pkn_SPsubMCountMTMnnzR ( int nra, int nca, int ncb,
00268 unsigned int nnza, index3 *ai,
00269 unsigned int *apermut, int *acols, boolean ca,
00270 unsigned int nnzb, index3 *bi,
00271 unsigned int *bpermut, int *brows, boolean rb,
00272 unsigned int *nnzab, unsigned int *nmultab );
00273 boolean pkn_SPsubMFindMTMnnzR ( int nra, int nca, int ncb,
00274 unsigned int nnza, index3 *ai,
00275 unsigned int *apermut, int *acols,
00276 unsigned int nnzb, index3 *bi,
00277 unsigned int *bpermut, int *brows,
00278 index2 *abi, int *abpos, index2 *aikbkj );
00279 boolean pkn_SPsubMCountMTMnnzC ( int nra, int nca, int ncb,
00280 unsigned int nnza, index3 *ai,
00281 unsigned int *apermut, int *arows, boolean ra,
00282 unsigned int nnzb, index3 *bi,
00283 unsigned int *bpermut, int *bcols, boolean cb,
00284 unsigned int *nnzab, unsigned int *nmultab );
00285 boolean pkn_SPsubMFindMTMnnzC ( int nra, int nca, int ncb,
00286 int unsigned nnza, index3 *ai,
00287 unsigned int *apermut, int *arows,
00288 unsigned int nnzb, index3 *bi,
00289 unsigned int *bpermut, int *bcols,
00290 index2 *abi, int *abpos, index2 *aikbkj );
00291
00292 #ifdef __cplusplus
00293 }
00294 #endif
00295
00296 #endif
00297