MPI_mgparc
mg.h
Go to the documentation of this file.
1 #ifndef MG_HEADER_FILE
2 #define MG_HEADER_FILE
3 
4 #define MAXLEVEL 20
5 /* improved coarse grid solver */
6 /* this structure stores all pointers to vectors, matrices of all elevels */
7 
9 { int nx[MAXLEVEL], /* intervalls in x/y direction */
10  ny[MAXLEVEL];
11  /* pointers for array .. on all levels */
12  int *id[MAXLEVEL], /* row end pointer */
13  *ik[MAXLEVEL]; /* column index */
14  double *sk[MAXLEVEL], /* matrix entries */
15  *u[MAXLEVEL], /* solution/correction */
16  *f[MAXLEVEL], /* r.h.d/defect */
17  *dd[MAXLEVEL], /* accumulated diagonal */
18  *aux[MAXLEVEL]; /* aux. vector (d,w,...) */
19 /* local to global numbering on coarse grid */
20  int *loc2glob;
21 /* accumulated coarse matrix */
22  int nglob, *cid, *cik;
23  double *csk;
24 };
25 
26 
27 /* this structure stores control parameters of the multigrid algorithm */
28 
30 { int cycle, /* kind of mg cycle (1/2) */
31  npre, npost; /* number of pre/postsmoothing sweeps */
32 };
33 
34 // ------------------------------ applybc1.cpp ---------------------------------------------
51 void ApplyDirichletBC1(const int nx, const int ny, const int neigh[],
52  const double u[], double sk[], const int id[], const int ik[] , double f[]);
53 
63 int AdrCRS(const int row, const int col, const int id[], const int ik[], const int nnode);
64 
65 // ------------------------------ allocati.cpp ---------------------------------------------
78 int AllocLevels(const int nlevels, const int nx, const int ny, PointerStruct* pp);
79 
100 int IniLevels(const double xl, const double xr, const double yb, const double yt,
101  const int neigh[], const int color, const int myid, const MPI::Intracomm& icomm,
102  const int nlevels, const PointerStruct *pp);
103 
112 int FreeLevels(const int nlevels, PointerStruct* pp);
113 
126 int GlobalCoarse(const int neigh[], const int color, const int myid,
127  const MPI::Intracomm& icomm, const int nlevels, PointerStruct *pp);
128 
129 // ------------------------------- gridtransfer.cpp --------------------------------------------
142 void Interpolate(const int nx, const int ny, double w[],
143  const int nx_c, const int ny_c, const double w_c[], const int neigh[]);
144 
158 void Restrict(const int nx, const int ny, const double w[],
159  const int nx_c, const int ny_c, double w_c[], const int neigh[]);
160 
161 // ----------------------------- jacsmooth.cpp ----------------------------------------------
181 void JacobiSmooth(const int nx, const int ny, const int neigh[], const int color,
182  const int myid, const MPI::Intracomm& icomm,
183  const double sk[], const int id[], const int ik[],
184  const double f[], double u[], const double dd[],
185  double aux[], const int maxiter );
186 
202 void JacobiSolveGlob(const int myid, const MPI::Intracomm& icomm,
203  const int nnode, const int nglob,
204  const double sk[], const int id[], const int ik[],
205  const int l2g[], const double f[], double u[] );
206 
207 
225 void JacobiSolve2(const int nx, const int ny, const int neigh[], const int color,
226  const MPI::Intracomm& icomm,
227  const double sk[], const int id[], const int ik[],
228  const double f[], double u[], const double dd[], double aux[]);
229 // ----------------------------- mgm.cpp ----------------------------------------------
230 
231 void MGM(const PointerStruct* const pp, const ControlStruct* const crtl,
232  const int level, const int neigh[],const int color,
233  const int myid, const MPI::Intracomm& icomm);
234 
235 
236 void MGMSolver(const PointerStruct* const pp, const ControlStruct* const crtl, const int level,
237  const int neigh[], const int color, const int myid, const MPI::Intracomm& icomm);
238 
239 
240 // ----------------------------- ----------------------------------------------
241 
242 #endif
double * sk[MAXLEVEL]
Definition: mg.h:14
void ApplyDirichletBC1(const int nx, const int ny, const int neigh[], const double u[], double sk[], const int id[], const int ik[], double f[])
Definition: applybc1.cpp:28
int FreeLevels(const int nlevels, PointerStruct *pp)
Definition: allocati.cpp:107
int IniLevels(const double xl, const double xr, const double yb, const double yt, const int neigh[], const int color, const int myid, const MPI::Intracomm &icomm, const int nlevels, const PointerStruct *pp)
Definition: allocati.cpp:55
int AllocLevels(const int nlevels, const int nx, const int ny, PointerStruct *pp)
Definition: allocati.cpp:9
int * loc2glob
Definition: mg.h:20
void MGMSolver(const PointerStruct *const pp, const ControlStruct *const crtl, const int level, const int neigh[], const int color, const int myid, const MPI::Intracomm &icomm)
Definition: mgm.cpp:81
Definition: mg.h:29
int * cid
Definition: mg.h:22
void Interpolate(const int nx, const int ny, double w[], const int nx_c, const int ny_c, const double w_c[], const int neigh[])
Definition: gridtransfer.cpp:9
#define MAXLEVEL
Definition: mg.h:4
Definition: mg.h:8
void JacobiSmooth(const int nx, const int ny, const int neigh[], const int color, const int myid, const MPI::Intracomm &icomm, const double sk[], const int id[], const int ik[], const double f[], double u[], const double dd[], double aux[], const int maxiter)
Definition: jacsmooth.cpp:8
int ny[MAXLEVEL]
Definition: mg.h:9
int npre
Definition: mg.h:30
double * dd[MAXLEVEL]
Definition: mg.h:14
void JacobiSolveGlob(const int myid, const MPI::Intracomm &icomm, const int nnode, const int nglob, const double sk[], const int id[], const int ik[], const int l2g[], const double f[], double u[])
Definition: jacsmooth.cpp:39
void JacobiSolve2(const int nx, const int ny, const int neigh[], const int color, const MPI::Intracomm &icomm, const double sk[], const int id[], const int ik[], const double f[], double u[], const double dd[], double aux[])
Definition: jacsolve.cpp:65
void Restrict(const int nx, const int ny, const double w[], const int nx_c, const int ny_c, double w_c[], const int neigh[])
Definition: gridtransfer.cpp:88
int AdrCRS(const int row, const int col, const int id[], const int ik[], const int nnode)
Definition: applybc1.cpp:5
double * csk
Definition: mg.h:23
double * f[MAXLEVEL]
Definition: mg.h:14
int * ik[MAXLEVEL]
Definition: mg.h:12
void MGM(const PointerStruct *const pp, const ControlStruct *const crtl, const int level, const int neigh[], const int color, const int myid, const MPI::Intracomm &icomm)
Definition: mgm.cpp:9
double * u[MAXLEVEL]
Definition: mg.h:14
int GlobalCoarse(const int neigh[], const int color, const int myid, const MPI::Intracomm &icomm, const int nlevels, PointerStruct *pp)
Definition: allocati.cpp:182
int * cik
Definition: mg.h:22
int nx[MAXLEVEL]
Definition: mg.h:9
double * aux[MAXLEVEL]
Definition: mg.h:14
int nglob
Definition: mg.h:22