00001
00118 #ifndef _BMAT_H_
00119 #define _BMAT_H_
00120
00121 #include <mc/mc_base.h>
00122
00123 #include <mc/mat.h>
00124
00130 struct sBmat {
00131
00133 Vmem *vmem;
00135 int iMadeVmem;
00136
00138 char name[10];
00140 int numB;
00141
00145 MATmirror mirror[MAXV][MAXV];
00146
00150 Mat *AD[MAXV][MAXV];
00151
00153 Mat *AG;
00154
00156 struct sBmat *coarse;
00158 struct sBmat *fine;
00159
00160 };
00161
00168 typedef struct sBmat Bmat;
00169
00170
00171
00172
00173
00174
00175
00176 #if !defined(VINLINE_BAM)
00177 #else
00178 #endif
00179
00200 Bmat* Bmat_ctor(Vmem *vmem, const char *name,
00201 int pnumB, int pnumR[MAXV], int pnumC[MAXV],
00202 MATmirror pmirror[MAXV][MAXV]);
00203
00218 void Bmat_dtor(Bmat **thee);
00219
00236 void Bmat_initStructure(Bmat *thee,
00237 MATformat pfrmt[MAXV][MAXV], MATsym psym[MAXV][MAXV],
00238 int pnumO[MAXV][MAXV], int *IJA[MAXV][MAXV]);
00239
00250 void Bmat_copyStructure(Bmat *thee, Bmat *model);
00251
00260 void Bmat_killStructure(Bmat *thee);
00261
00270 int Bmat_numB(Bmat *thee);
00271
00282 int Bmat_numR(Bmat *thee, int p, int q);
00283
00294 int Bmat_numC(Bmat *thee, int p, int q);
00295
00306 int Bmat_numA(Bmat *thee, int p, int q);
00307
00322 int Bmat_numO(Bmat *thee, int p, int q);
00323
00336 int Bmat_numZ(Bmat *thee, int p, int q);
00337
00346 int Bmat_numRT(Bmat *thee);
00347
00356 int Bmat_numCT(Bmat *thee);
00357
00366 int Bmat_numAT(Bmat *thee);
00367
00378 int Bmat_numOT(Bmat *thee);
00379
00390 int Bmat_numZT(Bmat *thee);
00391
00402 MATformat Bmat_format(Bmat *thee, int p, int q);
00403
00414 MATsym Bmat_sym(Bmat *thee, int p, int q);
00415
00426 MATstate Bmat_state(Bmat *thee, int p, int q);
00427
00438 MATimpl Bmat_impl(Bmat *thee, int p, int q);
00439
00450 MATmirror Bmat_mirror(Bmat *thee, int p, int q);
00451
00460 int Bmat_sizeA(Bmat *thee);
00461
00470 int Bmat_sizeIJA(Bmat *thee);
00471
00482 int *Bmat_IJA(Bmat *thee, int p, int q);
00483
00494 int *Bmat_IA(Bmat *thee, int p, int q);
00495
00506 int *Bmat_JA(Bmat *thee, int p, int q);
00507
00518 double *Bmat_A(Bmat *thee, int p, int q);
00519
00530 double *Bmat_diag(Bmat *thee, int p, int q);
00531
00542 double *Bmat_offU(Bmat *thee, int p, int q);
00543
00554 double *Bmat_offL(Bmat *thee, int p, int q);
00555
00564 void Bmat_print(Bmat *thee);
00565
00576 void Bmat_printSp(Bmat *thee, char *fname, int pflag);
00577
00593 void Bmat_printNoD(Bmat *thee);
00594
00612 void Bmat_printSpNoD(Bmat *thee, char *fname, int pflag);
00613
00625 void Bmat_zero(Bmat *thee);
00626
00635 void Bmat_diri(Bmat *thee);
00636
00650 void Bmat_set(Bmat *thee, int p, int q, int i, int j, double val);
00651
00665 void Bmat_addTo(Bmat *thee, int p, int q, int i, int j, double val);
00666
00681 void Bmat_galerkin(Bmat *thee, Bmat *rmat, Bmat *amat, Bmat *pmat);
00682
00697 int Bmat_sluDirect(Bmat *thee);
00698
00709 void Bmat_sluCreate(Bmat *thee);
00710
00719 int Bmat_sluFactor(Bmat *thee);
00720
00733 int Bmat_sluSolve(Bmat *thee, int key, double *f, double *u);
00734
00745 void Bmat_sluDestroy(Bmat *thee);
00746
00755 void Bmat_memChk(Bmat *thee);
00756
00767 Bmat *Bmat_clone(Vmem *vmem, char *name, Bmat *X);
00768
00778 void Bmat_copy(Bmat *Y, Bmat *X);
00779
00789 void Bmat_squeezeBRC(Bmat *thee, int key);
00790
00800 void Bmat_copy2(Bmat *Y, Bmat *X);
00801
00814 void Bmat_axpy(Bmat *Y, Bmat *X, double val, int key);
00815
00816 #endif
00817
00818