summaryrefslogtreecommitdiff
path: root/benchmarks/CUDA/DG/include/Mesh.h
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/CUDA/DG/include/Mesh.h')
-rw-r--r--benchmarks/CUDA/DG/include/Mesh.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/benchmarks/CUDA/DG/include/Mesh.h b/benchmarks/CUDA/DG/include/Mesh.h
new file mode 100644
index 0000000..f14338a
--- /dev/null
+++ b/benchmarks/CUDA/DG/include/Mesh.h
@@ -0,0 +1,98 @@
+
+/* default order */
+#ifndef p_N
+#define p_N 6
+#endif
+
+#define NODETOL 1e-4
+#ifdef NDG2d
+#define p_Nfp (p_N+1)
+#define p_Np ((p_N+1)*(p_N+2)/2)
+#define p_Nfields 3
+#define p_Nfaces 3
+#endif
+
+#ifdef NDG3d
+#define p_Nfp ((p_N+1)*(p_N+2)/2)
+#define p_Np ((p_N+1)*(p_N+2)*(p_N+3)/6)
+#define p_Nfields 6
+#define p_Nfaces 4
+#endif
+
+#define BSIZE (16*((p_Np+15)/16))
+//#define BSIZE p_Np
+
+#define max(a,b) ( (a>b)?a:b )
+#define min(a,b) ( (a<b)?a:b )
+
+/* list of vertices on each edge */
+
+typedef struct foo {
+
+ int nprocs; /* number of processes */
+ int procid; /* number of this process */
+
+ int Nverts; /* number of vertices per element */
+ int Nfaces; /* number of faces per element */
+ int Nedges; /* number of faces per element (3d only) */
+
+ int Nv; /* number of mesh vertices */
+ int K; /* number of mesh elements */
+ int **EToV; /* element to global vertex list */
+ int **EToG; /* element to global face number list */
+ int **EToS; /* element to global edge number list */
+
+ int **EToE; /* element to neighbor element (elements numbered by their proc) */
+ int **EToF; /* element to neighbor face (element local number 0,1,2) */
+ int **EToP; /* element to neighbor proc (element prc number 0,1,.., nprocs-1) */
+
+ int **localEToV; /* element to process local vertex list */
+ int localNunique; /* number of unique nodes on this process */
+
+ int *bcflag; /* vector. entry n is 1 if vertex n is on a boundary */
+
+ double **GX; /* x-coordinates of element vertices */
+ double **GY; /* y-coordinates of element vertices */
+ double **GZ; /* z-coordinates of element vertices (3d) */
+
+ /* high order node info */
+ int **Fmask; /* face node numbers in element volume data */
+
+ double *r, *s, *t; /* (r,s) coordinates of reference nodes */
+ double **Dr, **Ds, **Dt; /* local nodal derivative matrices */
+ double **LIFT; /* local lift matrix */
+
+ double **x; /* x-coordinates of element nodes */
+ double **y; /* y-coordinates of element nodes */
+ double **z; /* z-coordinates of element nodes (3d) */
+
+ /* DG STUFF (EXPERIMENTAL) */
+ int *vmapM; /* volume id of -ve trace of face node */
+ int *vmapP; /* volume id of +ve trace of face node */
+ int *Npar; /* # of nodes to send recv to each proc */
+ int **parK; /* element of parallel nodes */
+ int **parF; /* face of parallel nodes */
+
+ /* MPI stuff */
+ int parNtotalout; /* total number of nodes to send */
+ int *parmapOUT; /* list of nodes to send out */
+ int *c_parmapOUT; /* device list */
+
+ float *f_outQ, *f_inQ; /* MPI data buffers */
+
+ /* float version of operators */
+ float *f_Dr, *f_Ds, *f_Dt;
+ float *f_LIFT;
+
+ /* float geometric info */
+ float *vgeo; /* geometric factors */
+ float *surfinfo;
+
+ /* float field storage (CPU) */
+ float *f_Q, *f_rhsQ, *f_resQ;
+
+ /* time stepping constants */
+ double *rk4a, *rk4b, *rk4c;
+
+}Mesh;
+