00001
00038 #ifndef _BVEC_H_
00039 #define _BVEC_H_
00040
00041 #include <mc/mc_base.h>
00042
00043 #include <mc/vec.h>
00044 #include <mc/bmat.h>
00045
00052 struct sBvec {
00053
00054 Vmem *vmem;
00055 int iMadeVmem;
00057 char name[10];
00058 int n;
00059 double *u;
00060 int iMallocU;
00062 struct sBvec *coarse;
00063 struct sBvec *fine;
00065 int numB;
00066 int numR[MAXV];
00067 Vec *VC[MAXV];
00069 };
00070
00077 typedef struct sBvec Bvec;
00078
00079
00080
00081
00082
00083
00084
00085 #if !defined(VINLINE_BAM)
00086
00094 int Bvec_numB(Bvec *thee);
00095 #else
00096
00105 # define Bvec_numB(thee) ((thee)->numB)
00106 #endif
00107
00119 Bvec* Bvec_ctor(Vmem *vmem,
00120 const char *name, int pnumB, int pnumR[MAXV]);
00121
00134 Bvec* Bvec_ctor2(Vmem *vmem,
00135 const char *name, int pnumB, int pnumR[MAXV], double *data);
00136
00147 Bvec* Bvec_ctor3(Vmem *vmem,
00148 const char *name, int length);
00149
00161 Bvec* Bvec_ctor4(Vmem *vmem,
00162 const char *name, int length, double *data);
00163
00172 void Bvec_dtor(Bvec **thee);
00173
00186 void Bvec_createVectors(Bvec *thee, Bvec *vecs[], int num);
00187
00198 void Bvec_destroyVectors(Bvec *thee, Bvec *vecs[], int num);
00199
00211 void Bvec_createVecMat(Bvec *thee, Bvec *vecs[], int num, Mat **mat);
00212
00224 void Bvec_destroyVecMat(Bvec *thee, Bvec *vecs[], int num, Mat **mat);
00225
00234 int Bvec_len(Bvec *thee);
00235
00244 double* Bvec_addr(Bvec *thee);
00245
00255 double Bvec_val(Bvec *thee, int i);
00256
00267 void Bvec_set(Bvec *thee, int i, double val);
00268
00277 double Bvec_nrm1(Bvec *thee);
00278
00287 double Bvec_nrm2(Bvec *thee);
00288
00297 double Bvec_nrm8(Bvec *thee);
00298
00308 double Bvec_dif1(Bvec *thee, Bvec *v);
00309
00319 double Bvec_dif2(Bvec *thee, Bvec *v);
00320
00330 double Bvec_dif8(Bvec *thee, Bvec *v);
00331
00341 double Bvec_dot(Bvec *thee, Bvec *v);
00342
00352 void Bvec_init(Bvec *thee, double val);
00353
00363 void Bvec_scal(Bvec *thee, double val);
00364
00374 void Bvec_copy(Bvec *thee, Bvec *v);
00375
00386 void Bvec_axpy(Bvec *thee, Bvec *v, double val);
00387
00396 void Bvec_print(Bvec *thee);
00397
00407 void Bvec_printSp(Bvec *thee, char *fname);
00408
00419 void Bvec_diagScale(Bvec *thee, Bmat *A, Bvec *f);
00420
00433 void Bvec_matvec(Bvec *thee, Bmat *A, Bvec *v, int key, int part);
00434
00459 void Bvec_smooth(Bvec *thee, Bmat *A, Bvec *f, Bvec *w,
00460 int key, int ioflag, int meth, int adj, int itmax, double etol,
00461 double omega);
00462
00473 void Bvec_bnd(Bvec *thee, Bmat *bmat, int key);
00474
00483 void Bvec_memChk(Bvec *thee);
00484
00493 int Bvec_numRT(Bvec *thee);
00494
00504 int Bvec_numRB(Bvec *thee, int i);
00505
00515 double* Bvec_addrB(Bvec *thee, int i);
00516
00527 double Bvec_valB(Bvec *thee, int i, int which);
00528
00540 void Bvec_setB(Bvec *thee, int i, int which, double val);
00541
00553 void Bvec_addToB(Bvec *thee, int i, int which, double val);
00554
00565 void Bvec_initB(Bvec *thee, int i, double val);
00566
00576 void Bvec_absLog(Bvec *thee, double val);
00577
00598 void Bvec_lmethod(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bvec *ut,
00599 int key, int flag, int itmax, double etol, int prec, int cycle, Bmat *P,
00600 int meth);
00601
00619 void Bvec_slu(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bvec *ut,
00620 int key, int flag);
00621
00645 void Bvec_mg(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bvec *ut,
00646 int key, int flag, int itmax, double etol, int prec, int cycle, Bmat *P);
00647
00664 void Bvec_mgInit(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bmat *P);
00665
00678 void Bvec_mgDestroy(Bvec *thee, Bmat *A, Bvec *f, Bvec *r);
00679
00741 void Bvec_cg(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bvec *ut,
00742 int key, int flag, int itmax, double etol, int prec, int cycle, Bmat *P,
00743 Bvec *p, Bvec *ap, Bvec *bap, Bvec *po, Bvec *apo, Bvec *tp);
00744
00828 void Bvec_bcg(Bvec *thee, Bmat *A, Bvec *f, Bvec *r, Bvec *ut,
00829 int key, int flag, int itmax, double etol, int prec, int cycle, Bmat *P,
00830 Bvec *s,
00831 Bvec *p, Bvec *ap, Bvec *bap, Bvec *po, Bvec *apo,
00832 Bvec *q, Bvec *atq, Bvec *btatq, Bvec *qo, Bvec *atqo);
00833
00878 void Bvec_eig(Bvec *thee, Bmat *A,
00879 int litmax, double letol, double *lambda,
00880 int key, int flag, int itmax, double etol);
00881
00882 #endif
00883
00884