00001 #ifndef DENSEMAT_H
00002 #define DENSEMAT_H
00003
00004 #include "matrix.h"
00005 #include "vector.h"
00006 #include "gtopology.h"
00007
00008 class precond;
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 class densemat
00019 {
00020 public:
00021 densemat (void);
00022 ~densemat (void);
00023 void alloc (long m);
00024 void dealloc(void);
00025 void copy (densemat *dm);
00026 void copy_dm (densemat &dm);
00027 double* status ();
00028 long decomp ();
00029 void changedecomp ();
00030 void setfact ();
00031 void setnotfact ();
00032 void nullmat ();
00033 void localize (matrix &b,long *cn);
00034 void localized (double *b,long *cn,long m);
00035 void glocalize (matrix &b,long *rcn,long *ccn);
00036 void mult_localize (long nm,long *ncn1,long *ncn2,long *mcn);
00037 void initiate (long ndof,long mespr);
00038
00039 void mxv_dm (double *b,double *c);
00040 void addmat_dm (double c,densemat &dm);
00041 void scalmat_dm (double c);
00042 void maxmb(long nm, double *ma, double *mb, double *mc);
00043 void gemp (double *x,double *y,long m,double limit,long pivot);
00044 void gempkon (double *b,double *c,double *x,double *y,long m,double zero,long tc);
00045 void lu (double *x,double *y,double zero,long tc);
00046 void ll (double *x,double *y,double zero,long tc);
00047 void ill (double *x,double *y,double zero,double limit,long tc);
00048 void ker (double *r,long &dim,long *se,long ense,double limit);
00049
00050
00051 void cg (double *x,double *y,long ni,double err,long &ani,double &ares,double zero,long iv);
00052 void cg_prec (densemat &dm,double *x,double *y,long ni,double err,long &ani,double &ares,
00053 double zero,long iv,long tprec,double par);
00054
00055 void cg_prec_new (precond &pr,double *x,double *y,long ni,double err,long &ani,double &ares,
00056 double zero,long iv);
00057
00058 void printmat (FILE *out);
00059 void printdiag (FILE *out);
00060 double give_entry (long ri,long ci);
00061 void add_entry (double e,long ri,long ci);
00062 long give_negm ();
00063
00064 void diag_scale (double *d);
00065
00066 double estim_spect_radius ();
00067
00068 void assemble_dense_from_scr(long *scradr,long *scrci,double *scra,long neq);
00069
00070
00071 long n;
00072
00073 long negm;
00074
00075 double *a;
00076
00077 long decompid;
00078
00079
00080 double *a_plus;
00081
00082 long nbvns;
00083
00084 double *bvns;
00085
00086 long *abvns;
00087
00088 long *iirm;
00089
00090 };
00091
00092 #endif