1 /*
2  * xSize = total number of grids(includ boundary)
3  * 0..nb-1 and xSize-(nb-1)..xsize = boundary
4  * nb to xSize-nb   = interior
5  */
6 #ifndef __GABEDIT_DOMAINMG_H__
7 #define __GABEDIT_DOMAINMG_H__
8 #include "TypesMG.h"
9 typedef struct _DomainMG DomainMG;
10 struct _DomainMG
11 {
12 	       	gint xSize;
13 	       	gint ySize;
14 	       	gint zSize;
15 	       	gint size;
16 		gdouble xLength;
17 		gdouble yLength;
18 		gdouble zLength;
19 		gdouble diag;
20 		gdouble cc;
21 		gdouble fLaplacinaX[MAXBOUNDARY+1];
22 		gdouble fLaplacinaY[MAXBOUNDARY+1];
23 		gdouble fLaplacinaZ[MAXBOUNDARY+1];
24 
25 		gdouble fGradientX[MAXBOUNDARY];
26 		gdouble fGradientY[MAXBOUNDARY];
27 		gdouble fGradientZ[MAXBOUNDARY];
28 		gdouble x0;
29 		gdouble y0;
30 		gdouble z0;
31 		gdouble xh;
32 		gdouble yh;
33 		gdouble zh;
34 		gdouble cellVolume;
35 		gint maxLevel;
36 
37 		LaplacianOrderMG laplacianOrder;
38 		gint nBoundary;
39 		glong incx;
40 		gint incy;
41 		gint incz;
42 		gint nShift;
43 
44 		gint iXBeginBoundaryLeft;
45 		gint iXEndBoundaryLeft;
46 		gint iXBeginBoundaryRight;
47 		gint iXEndBoundaryRight;
48 
49 		gint iYBeginBoundaryLeft;
50 		gint iYEndBoundaryLeft;
51 		gint iYBeginBoundaryRight;
52 		gint iYEndBoundaryRight;
53 
54 		gint iZBeginBoundaryLeft;
55 		gint iZEndBoundaryLeft;
56 		gint iZBeginBoundaryRight;
57 		gint iZEndBoundaryRight;
58 
59 		gint iXBeginInterior;
60 		gint iXEndInterior;
61 
62 		gint iYBeginInterior;
63 		gint iYEndInterior;
64 
65 		gint iZBeginInterior;
66 		gint iZEndInterior;
67 
68 };
69 /* Method of DomainMG struct */
70 void printDomain(DomainMG*g);
71 gboolean ifEqualDomainMG(DomainMG*g, DomainMG* right);
72 gint getMaxLevelDomainMG1(DomainMG*, gint size);
73 void setMaxLevelDomainMG(DomainMG*);
74 void setParametersDomainMG(DomainMG*);
75 void setCoefsLaplacianDomainMG(DomainMG*);
76 void setCoefsGradientDomainMG(DomainMG*);
77 void destroyDomainMG(DomainMG*);
78 void setLaplacianOrderDomainMG(DomainMG*, const LaplacianOrderMG);
79 void levelUpDomainMG(DomainMG*);
80 void levelDownDomainMG(DomainMG*);
81 DomainMG getDomainMG(gint, gint, gint, gdouble, gdouble, gdouble, gdouble, gdouble, gdouble, LaplacianOrderMG);
82 DomainMG getNullDomainMG();
83 #endif /* __GABEDIT_DOMAINMG_H__ */
84