00001 #ifndef PSOLVER_H
00002 #define PSOLVER_H
00003
00004 #include <stdio.h>
00005 #include "mpi.h"
00006 #include "paral.h"
00007 #include "../GEFEL/gtopology.h"
00008 #include "../GEFEL/gmatrix.h"
00009
00010 typedef enum ldomdectype {lprimaldd=1,lfetidd=5};
00011 typedef enum lredsystsolver {lpldl=1,lplu=2,lpgemp=3,lpcg=5};
00012
00013 class psolver
00014 {
00015 public:
00016 psolver (int np,int mr,int nd);
00017 ~psolver ();
00018 void movedata (paral *plg);
00019
00020 void redsys_parldl (paral *plg,double *condmat,double *condvect,FILE *out);
00021 void redsys_parlu (paral *plg,double *condmat,double *condvect,FILE *out);
00022 void redsys_pargemp (paral *plg,double *condmat,double *condvect,FILE *out);
00023 void redsys_parcg (paral *plg,double *condmat,double *condvect,FILE *out);
00024
00025 void hmatrixsize (paral *plg,double *rbm,long &maxnrbm);
00026 void hmatrix (gtopology *top,paral *plg,double *h,double *rbm,long maxnrbm);
00027 void qvector (paral *plg,double *q,double *rbm,double *f,long maxnrbm);
00028 void feti_projection (double *v,double *h,double *h1);
00029 void mpcg (gtopology *top,paral *plg,gmatrix *gm,
00030 double *w,double *rhs,double *q,double *h,double *h1,long *rbmi,FILE *out);
00031 void lagrmultdispl (gtopology *top,paral *plg,gmatrix *gm,
00032 double *w,double *d,double *f,double *rbm,long *rbmi,
00033 double *h,double *h1);
00034 void lumpedprec (gtopology *top,double *v,double *pv);
00035
00036 void par_linear_solver (gtopology *top,paral *plg,gmatrix *gm,
00037 double *lhs,double *rhs,FILE *out);
00038
00039
00040
00041 ldomdectype tdd;
00042
00043
00044 lredsystsolver rssol;
00045
00046
00047
00048 long ngdof;
00049
00050 long ndof;
00051
00052 long indof;
00053
00054 long nrbm;
00055
00056 long enrbm;
00057
00058 double lithr;
00059
00060
00061 int nproc;
00062
00063 int myrank;
00064
00065 int ndom;
00066
00067
00068
00069 long nicg;
00070
00071 long anicg;
00072
00073 double errcg;
00074
00075 double aerrcg;
00076
00077
00078 long hsize;
00079
00080
00081 double limit;
00082
00083 double zero;
00084 };
00085
00086 #endif