00001 #ifndef GMATRIX_H
00002 #define GMATRIX_H
00003
00004 #include "LAPACK/spmatrix.h"
00005 #include "SPARSE/DSSolver.h"
00006
00007 #include "galias.h"
00008 #include "densemat.h"
00009 #include "dskyline.h"
00010 #include "skyline.h"
00011 #include "cr.h"
00012 #include "scr.h"
00013
00014 #include "elemmat.h"
00015 #include "gtopology.h"
00016
00017 #include "slesolv.h"
00018
00019 class precond;
00020
00021
00022
00023
00024
00025
00026 class gmatrix
00027 {
00028 public:
00029 gmatrix ();
00030 ~gmatrix ();
00031 void alloc ();
00032 void dealloc ();
00033 void initiate (gtopology *top,long ndof,storagetype ats,long mespr,FILE *out);
00034
00035
00036 void setval (slesolv *ssle);
00037
00038 void localize (matrix &lm,ivector &cn,long eid);
00039 void localized (double *lm,long *cn,long nc,long eid);
00040 void glocalize (matrix &lm,ivector &rcn,ivector &ccn);
00041 void mult_localize (long nm,long *ncn1,long *ncn2,long *mcn);
00042
00043 void prepmat (double limit,long mespr);
00044 void prepmat2 (gtopology *top,FILE *out);
00045 void auxdatsparsesolver (gtopology *top,FILE *out);
00046
00047 void solve_system (gtopology *top,precond &prec,double *lhs,double *rhs,FILE *out);
00048 void decompose_matrix ();
00049 void back_substitution (double *lhs,double *rhs);
00050
00051 void incomplete_fact (double incompltresh);
00052 void back_incomplete_fact (double *x,double *y,double incompltresh);
00053
00054 void condense (gtopology *top,double *condmat,double *condvect,double *lhs,double *rhs,long nrdof,long tc,FILE *out);
00055 void kernel (double *rbm,long &nse,long *se,long ense,double limit,long tc);
00056 void ldl_feti (double *lhs,double *rhs,long nse,long *se,double zero);
00057 void gmxv (double *a,double *b);
00058 void decompgmxv (double *a,double *b);
00059 void addgm (double a,gmatrix &gm);
00060 void scalgm (double a);
00061 void copygm (gmatrix &gm);
00062 void a12block (gtopology *top,double *block,long nrdof,FILE *out);
00063 void printmat (FILE *out);
00064 void printdiag (FILE *out);
00065
00066 void changedecomp ();
00067
00068
00069 long decomp ();
00070
00071 double give_entry (long ri,long ci);
00072 void add_entry (double e,long ri,long ci);
00073
00074
00075 long give_negm ();
00076
00077 void diag_scale (double *d);
00078 void diag_check (double thr,double *rhs);
00079
00080 double power_method (double *v,long ni,double err);
00081 double inverse_iteration (double *v,long ni,double err);
00082
00083 double estim_spect_radius ();
00084
00085
00086
00087 storagetype ts;
00088
00089 linsolvertype tlinsol;
00090
00091 linsolvertype tsol;
00092
00093 precondtype tprec;
00094
00095
00096 unsigned char bsize;
00097
00098
00099 long n;
00100
00101 double zero;
00102
00103 long nicg;
00104
00105 double errcg;
00106
00107 long anicg;
00108
00109 double aerrcg;
00110
00111
00112
00113
00114 long iv;
00115
00116
00117 double omega;
00118 double indegamma;
00119
00120
00121 long nbdof;
00122
00123
00124 double limit;
00125
00126
00127 long *auxsd;
00128
00129
00130 long pmat;
00131
00132 densemat *dm;
00133 skyline *sky;
00134 dskyline *dsky;
00135 comprow *cr;
00136 symcomprow *scr;
00137 elemmat *em;
00138 MatrixPtr Matrix;
00139 ISolver *sdirect;
00140
00141
00142
00143
00144
00145 };
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 #endif
00164