00001 #ifndef SYMCOMPROW_H
00002 #define SYMCOMPROW_H
00003
00004 #include "galias.h"
00005 #include "matrix.h"
00006 #include "vector.h"
00007 #include "gtopology.h"
00008 #include "SPARSE/DSSolver.h"
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 class symcomprow
00033 {
00034 public:
00035 symcomprow (void);
00036 ~symcomprow (void);
00037 void allocadr (long m);
00038 double* status ();
00039 long decomp ();
00040 void changedecomp ();
00041 void nullmat ();
00042 void numcontr_elem (long *cn,long ndofe);
00043 void numcontr (gtopology *top);
00044 void fillarray_elem (long *cn,long ndofe);
00045 void fillarray (gtopology *top);
00046 void addresses (void);
00047 void sort_and_colindex (void);
00048 void sort_and_colindex_tko (void);
00049 void localize (matrix &b,long *cn);
00050 void localized (double *b,long *cn,long nc);
00051 long minimize (double limit);
00052 void initiate (gtopology *top,long ndof,long mespr);
00053
00054 double give_entry (long ri,long rci);
00055 void add_entry (double e,long ri,long rci);
00056
00057 void mxv_scr (double *b,double *c);
00058 void addmat_scr (double c,symcomprow &scr);
00059 void scalmat_scr (double c);
00060 void cg (double *x,double *y,long ni,double err,long &ani,double &ares,double limit,long iv);
00061
00062 void prec_diag_scr (double *x,double *y);
00063 void prec_ssor_scr (double *x,double *y,double omega);
00064 double rows_mult_ldl_scr (long m,long o);
00065 void incomplete_ldl (double gamma);
00066 void prec_ildl_scr (double *x,double *y);
00067
00068 void cg_prec (double *x,double *y,long ni,double err,long &ani,double &ares,
00069 double zero,long iv,long tprec,double par,ISolver *sdirect);
00070
00071 void printmat (FILE *out);
00072 void printdiag (FILE *out);
00073 void copy_scr (symcomprow &scr);
00074
00075 long give_negm ();
00076
00077 void select_submatrix(symcomprow *smscr,long nsdof,long *sdof);
00078
00079
00080
00081 long n;
00082
00083 long negm;
00084
00085 long *adr;
00086
00087 long *adra;
00088
00089 long *aux;
00090
00091 long *ci;
00092
00093 double *a;
00094
00095 double *incdec;
00096
00097 double limit;
00098
00099 long decompid;
00100 };
00101
00102 #endif