00001 #ifndef PSOLVER_H
00002 #define PSOLVER_H
00003
00004 #include <stdio.h>
00005 #include "mpi.h"
00006 #include "pgalias.h"
00007 #include "gtopology.h"
00008 #include "gmatrix.h"
00009 #include "schurcompl.h"
00010 #include "feti1.h"
00011 #include "dpfeti.h"
00012 #include "lplate.h"
00013 #include "partop.h"
00014 #include "partopjk.h"
00015 #include "parcongrad.h"
00016 #include "boundparcongrad.h"
00017 #include "xfile.h"
00018 #include "selnodes.h"
00019 #include "fixnodesel.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 class psolver
00030 {
00031 public:
00032 psolver (int np,int mr,char *nameproc,int nl);
00033 ~psolver ();
00034 void initiate (gtopology *top,int argc,const char**argv);
00035 void read (XFILE *in,gtopology *gt,long nd,storagetype tsm,long mes);
00036 void print (FILE *out);
00037 void read_ltg (XFILE *in,gtopology *top,FILE *out);
00038 void procdomcorr ();
00039
00040
00041
00042 long ordering (gtopology *top,FILE *out,char *proc_name);
00043
00044 void constr_mat (double *th,FILE *out);
00045
00046 void par_linear_solver (gtopology *top,gmatrix *gm,
00047 double *lhs,double *rhs,FILE *out,long mespr);
00048
00049 void gather_bound_vect (double *lv,double *gv);
00050 void scatter_bound_vect (double *lv,double *gv);
00051 double unbalanced_values (double *lv,FILE *out);
00052
00053 double pss (double *lv1,double *lv2,FILE *out);
00054 long selected_norm_calculation (long cid,double err,double thresh,gtopology *top,double *lv1,double *gv1,double *rhs,double *grhs,long n,FILE *out);
00055
00056
00057 void computation_stat (gtopology *top,gmatrix *gm);
00058 void computation_stat_print (FILE *out);
00059 long compare_on_master(double val, double limit);
00060
00061
00062
00063 domdectype tdd;
00064
00065
00066 redsystsolver trssol;
00067
00068
00069 storagetype rsmstor;
00070
00071
00072 slesolv *ssle;
00073
00074
00075 storagetype dmstor;
00076
00077
00078
00079
00080 meshdescription md;
00081
00082
00083 partop *ptop;
00084 partopjk *ptopjk;
00085
00086 selnodes *selnodschur;
00087 selnodes *selnodfeti;
00088
00089
00090
00091 long mespr;
00092
00093
00094
00095 long *ltg;
00096
00097
00098 long *domproc;
00099
00100
00101
00102 int nproc;
00103
00104 int myrank;
00105
00106 char procName[MPI_MAX_PROCESSOR_NAME];
00107
00108 int nameLength;
00109
00110
00111 long ndom;
00112
00113
00114 long enrbm;
00115
00116 double lithr;
00117
00118 long nicg;
00119
00120 long anicg;
00121
00122 double errcg;
00123
00124 double aerrcg;
00125
00126 long fetiprecond;
00127
00128 long prec;
00129
00130
00131 long condcorner;
00132
00133 long typecondcorner;
00134
00135 long nmember;
00136
00137
00138 double zero;
00139
00140
00141
00142 long minnn;
00143
00144 long maxnn;
00145
00146 long minne;
00147
00148 long maxne;
00149
00150 long minnegm;
00151
00152 long maxnegm;
00153
00154
00155 long *nndom;
00156
00157 long *nedom;
00158
00159 long *negmdom;
00160
00161
00162
00163 schurcompl *schcom;
00164
00165 feti1 *f1;
00166
00167 dpfeti *dpf;
00168
00169 lplate *lpp;
00170
00171 parcongrad *parcg;
00172
00173 boundparcongrad *boundparcg;
00174
00175 fixnodesel *fixnodes;
00176
00177 long condfixing;
00178
00179 long methodcondcor;
00180
00181 long typecondcur;
00182 long typecondsurf;
00183
00184
00185 long nmembercur;
00186 long nmembersurf;
00187
00188 long intpointocur;
00189 long nuserdefnod;
00190 long *userdefnod;
00191 long nring;
00192 long *ring;
00193
00194
00195 };
00196
00197 #endif