00001
00173 #ifndef _MAT_H_
00174 #define _MAT_H_
00175
00176 #include <mc/mc_base.h>
00177
00178 #include <mc/mtool.h>
00179 #include <mc/slu.h>
00180
00181
00187 struct sMat {
00188
00191 char name[10];
00193 Vmem *vmem;
00195 int iMadeVmem;
00196
00211 MATformat format;
00212
00220 MATstate state;
00221
00228 MATsym sym;
00229
00250 MATimpl impl;
00251
00254 int numR;
00257 int numC;
00263 int numA;
00267 int numO;
00277 int numZ;
00280 int numBR;
00283 int numBC;
00284
00286 int iMallocIJA;
00288 int iMallocA;
00291 int *IJA;
00299 double *A;
00302 int *BR;
00305 int *BC;
00306
00309 int *IA;
00312 int *JA;
00315 double *diag;
00318 double *offU;
00321 double *offL;
00322
00325 Slu *slu;
00328 Vset *lnkL;
00331 Vset *lnkU;
00334 void *xln;
00337 void *xlnt;
00338
00339 };
00340
00347 typedef struct sMat Mat;
00348
00349
00350
00351
00352
00353
00354
00355 #if !defined(VINLINE_BAM)
00356 #else
00357 #endif
00358
00372 Mat* Mat_ctor(Vmem *vmem, const char *name, int pnumR, int pnumC);
00373
00388 void Mat_dtor(Mat **thee);
00389
00407 void Mat_initStructure(Mat *thee,
00408 MATformat frmt, MATsym sym, int numO, int *IJA, double *A);
00409
00422 void Mat_copyStructure(Mat *thee, Mat *model);
00423
00437 void Mat_killStructure(Mat *thee);
00438
00447 int Mat_numR(Mat *thee);
00448
00457 int Mat_numC(Mat *thee);
00458
00467 int Mat_numA(Mat *thee);
00468
00479 int Mat_numO(Mat *thee);
00480
00491 int Mat_numZ(Mat *thee);
00492
00501 MATformat Mat_format(Mat *thee);
00502
00511 MATsym Mat_sym(Mat *thee);
00512
00521 MATstate Mat_state(Mat *thee);
00522
00531 MATimpl Mat_impl(Mat *thee);
00532
00542 void Mat_setFormat(Mat *thee, MATformat format);
00543
00553 void Mat_setSym(Mat *thee, MATsym sym);
00554
00564 void Mat_setState(Mat *thee, MATstate state);
00565
00575 void Mat_setImpl(Mat *thee, MATimpl impl);
00576
00585 int Mat_sizeIJA(Mat *thee);
00586
00595 int Mat_sizeA(Mat *thee);
00596
00605 int *Mat_IJA(Mat *thee);
00606
00615 int *Mat_IA(Mat *thee);
00616
00625 int *Mat_JA(Mat *thee);
00626
00635 double *Mat_A(Mat *thee);
00636
00645 double *Mat_diag(Mat *thee);
00646
00655 double *Mat_offU(Mat *thee);
00656
00665 double *Mat_offL(Mat *thee);
00666
00675 void Mat_print(Mat *thee);
00676
00687 void Mat_printSp(Mat *thee, char *fname, int pflag);
00688
00704 void Mat_printNoD(Mat *thee);
00705
00723 void Mat_printSpNoD(Mat *thee, char *fname, int pflag);
00724
00736 void Mat_zero(Mat *thee);
00737
00749 void Mat_set(Mat *thee, int i, int j, double val);
00750
00762 void Mat_addTo(Mat *thee, int i, int j, double val);
00763
00777 void Mat_buildBRC(Mat *thee, int numBR, int numBC, int *BR, int *BC);
00778
00787 void Mat_zeroBRC(Mat *thee);
00788
00797 void Mat_diagBRC(Mat *thee);
00798
00814 void Mat_galerkin(Mat *thee, Mat *rmat, Mat *amat, Mat *pmat);
00815
00830 int Mat_sluDirect(Mat *thee);
00831
00843 void Mat_sluCreate(Mat *thee);
00844
00853 int Mat_sluFactor(Mat *thee);
00854
00867 int Mat_sluSolve(Mat *thee, int key, double *f, double *u);
00868
00879 void Mat_sluDestroy(Mat *thee);
00880
00889 void Mat_memChk(Mat *thee);
00890
00900 void Mat_copy(Mat *thee, Mat *smat);
00901
00911 void Mat_copyROW2COL(Mat *thee, Mat *smat);
00912
00922 void Mat_copyCOL2ROW(Mat *thee, Mat *smat);
00923
00933 void Mat_copyDRC2RLN(Mat *thee, Mat *smat);
00934
00944 void Mat_copyROW2RLN(Mat *thee, Mat *smat);
00945
00955 void Mat_copyCOL2RLN(Mat *thee, Mat *smat);
00956
00966 void Mat_copyRLN2ROW(Mat *thee, Mat *smat);
00967
00977 void Mat_copyDRC2CLN(Mat *thee, Mat *smat);
00978
00988 void Mat_copyROW2CLN(Mat *thee, Mat *smat);
00989
00999 void Mat_copyCOL2CLN(Mat *thee, Mat *smat);
01000
01010 void Mat_copyCLN2COL(Mat *thee, Mat *smat);
01011
01021 void Mat_copyCLN2RLN(Mat *thee, Mat *smat);
01022
01032 void Mat_copyRLN2CLN(Mat *thee, Mat *smat);
01033
01043 void Mat_copyDRC2XLN(Mat *thee, Mat *smat);
01044
01054 void Mat_copyROW2XLN(Mat *thee, Mat *smat);
01055
01065 void Mat_copyCOL2XLN(Mat *thee, Mat *smat);
01066
01076 void Mat_copyRLN2XLN(Mat *thee, Mat *smat);
01077
01087 void Mat_copyCLN2XLN(Mat *thee, Mat *smat);
01088
01098 void Mat_copyXLN2DRC(Mat *thee, Mat *smat);
01099
01109 void Mat_copyXLN2ROW(Mat *thee, Mat *smat);
01110
01120 void Mat_copyXLN2COL(Mat *thee, Mat *smat);
01121
01131 void Mat_copyXLN2RLN(Mat *thee, Mat *smat);
01132
01142 void Mat_copyXLN2CLN(Mat *thee, Mat *smat);
01143
01153 void Mat_squeezeBRC(Mat *thee, int key);
01154
01164 void Mat_copy2(Mat *Y, Mat *X);
01165
01183 void Mat_axpy(Mat *Y, Mat *X, double val, int key);
01184
01185
01198 void Mat_initStructureLN(Mat *thee, MATformat frmt, MATsym sym);
01199
01213 void Mat_killStructureLN(Mat *thee);
01214
01231 LinkRC* Mat_accessXLN(Mat *thee, int idx, int key);
01232
01247 void Mat_contribXLN(Mat *thee, int key, int i, int j, double val);
01248
01263 void Mat_contribNSYMXLN(Mat *thee, int key, int i, int j, double val);
01264
01279 void Mat_contribSSYMXLN(Mat *thee, int key, int i, int j, double val);
01280
01295 void Mat_contribSYMXLN(Mat *thee, int key, int i, int j, double val);
01296
01305 void Mat_printLN(Mat *thee);
01306
01317 void Mat_printLNSp(Mat *thee, char *fname, int pflag);
01318
01319 #endif
01320
01321