00001 #ifndef SADDPOINT_H 00002 #define SADDPOINT_H 00003 00004 #include "densemat.h" 00005 #include "gtopology.h" 00006 #include "gmatrix.h" 00007 00008 /** 00009 class deals with saddle point problems 00010 00011 JK, 28.11.2007 00012 */ 00013 class saddpoint 00014 { 00015 public: 00016 saddpoint (); 00017 ~saddpoint (); 00018 00019 void read (XFILE *in); 00020 void initiate (seqselnodes *selnodfeti,gtopology *top,FILE *out); 00021 void matrix_e (); 00022 00023 void get_jumps (long nc,double *jumps); 00024 void solve_system (gtopology *top,gmatrix *gm,double *lhs,double *rhs,FILE *out); 00025 00026 /// number of subdomains 00027 long ns; 00028 00029 long n; 00030 00031 /// number of dual unknowns (number of Lagrange multipliers) 00032 long nm; 00033 /// number of reduced/boundary/interface DOFs 00034 long nrdof; 00035 /// number of internal DOFs 00036 long nidof; 00037 00038 /// dense %matrix for the final system of equations 00039 densemat *dm; 00040 00041 double *c; 00042 00043 00044 /// number of DOFs (unknowns) in coarse problem 00045 long ndofcp; 00046 00047 /// array of numbers of unknowns (DOFs) contributing to the coarse problem 00048 /// ncdofd contains nproc components 00049 /// ncdofd[i]=j - the i-th subdomains contributes to coarse problem by j contributions 00050 long *ncdofd; 00051 00052 /// array containing code numbers contributing to the coarse problem 00053 /// extracted values from subdomains to the coarse problem 00054 /// edofs[i][j]=k - the j-th components contributing to the coarse problem from the i-th subdomains has number k 00055 long **edofs; 00056 00057 /// array of coarse code numbers 00058 /// it contains tnbn rows and ncdofd[i] columns 00059 /// ccn[i][j]=k - the j-th contribution from the i-th subdomain goes to the k-th coarse unknown 00060 long **ccn; 00061 00062 /// node-subdomain correspondence 00063 /// nsid[i]=j - the i-th node belongs to the j-th subdomain 00064 long *nsid; 00065 00066 00067 /// numbers of DOFs on subdomains 00068 /// ndofdom[i]=j - the i-th subdomain contains j DOFs 00069 long *ndofdom; 00070 00071 /// list of DOFs on subdomains 00072 /// cndom[i][j]=k - the j-th DOF on the i-th subdomain has number k 00073 long **cndom; 00074 00075 00076 /// matrix E 00077 double *e; 00078 }; 00079 00080 #endif