source: CIVL/examples/mpi-omp/AMG2013/sstruct_mv/sstruct_grid.h@ 7d77e64

main test-branch
Last change on this file since 7d77e64 was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 10.7 KB
Line 
1/*BHEADER**********************************************************************
2 * Copyright (c) 2008, Lawrence Livermore National Security, LLC.
3 * Produced at the Lawrence Livermore National Laboratory.
4 * This file is part of HYPRE. See file COPYRIGHT for details.
5 *
6 * HYPRE is free software; you can redistribute it and/or modify it under the
7 * terms of the GNU Lesser General Public License (as published by the Free
8 * Software Foundation) version 2.1 dated February 1999.
9 *
10 * $Revision: 2.4 $
11 ***********************************************************************EHEADER*/
12
13
14
15/******************************************************************************
16 *
17 * Header info for the hypre_SStructGrid structures
18 *
19 *****************************************************************************/
20
21#ifndef hypre_SSTRUCT_GRID_HEADER
22#define hypre_SSTRUCT_GRID_HEADER
23
24/*--------------------------------------------------------------------------
25 * hypre_SStructGrid:
26 *
27 * NOTE: Since variables may be replicated across different processes,
28 * a separate set of "interface grids" is retained so that data can be
29 * migrated onto and off of the internal (non-replicated) grids.
30 *--------------------------------------------------------------------------*/
31
32typedef enum hypre_SStructVariable_enum hypre_SStructVariable;
33
34typedef struct
35{
36 HYPRE_SStructVariable type;
37 int rank; /* local rank */
38 int proc;
39
40} hypre_SStructUVar;
41
42typedef struct
43{
44 int part;
45 hypre_Index cell;
46 int nuvars;
47 hypre_SStructUVar *uvars;
48
49} hypre_SStructUCVar;
50
51typedef struct
52{
53 MPI_Comm comm; /* TODO: use different comms */
54 int ndim;
55 int nvars; /* number of variables */
56 HYPRE_SStructVariable *vartypes; /* types of variables */
57 hypre_StructGrid *sgrids[8]; /* struct grids for each vartype */
58 hypre_BoxArray *iboxarrays[8]; /* interface boxes */
59
60 hypre_BoxArray *pneighbors;
61
62 int local_size; /* Number of variables locally */
63 HYPRE_BigInt global_size; /* Total number of variables */
64
65 hypre_Index periodic; /* Indicates if pgrid is periodic */
66
67 /* GEC0902 additions for ghost expansion of boxes */
68
69 int ghlocal_size; /* Number of vars including ghosts */
70
71 int cell_sgrid_done; /* =1 implies cell grid already assembled */
72} hypre_SStructPGrid;
73
74typedef struct
75{
76 hypre_Box box;
77 int part;
78 hypre_Index ilower;
79 hypre_Index coord;
80 hypre_Index dir;
81 int primary;
82
83} hypre_SStructNeighbor;
84
85enum hypre_SStructMapInfoType
86{
87 hypre_SSTRUCT_MAP_INFO_DEFAULT = 0,
88 hypre_SSTRUCT_MAP_INFO_NEIGHBOR = 1
89};
90
91typedef struct
92{
93 int type;
94 int proc;
95 HYPRE_BigInt offset;
96 int box;
97 /* GEC0902 ghost offset */
98 HYPRE_BigInt ghoffset;
99
100} hypre_SStructMapInfo;
101
102typedef struct
103{
104 int type;
105 int proc;
106 HYPRE_BigInt offset; /* minimum offset for this box */
107 int box;
108 HYPRE_BigInt ghoffset; /* GEC0902 minimum offset ghost for this box */
109 int part; /* part the box lives on */
110 hypre_Index ilower; /* local ilower on neighbor index-space */
111 hypre_Index coord; /* lives on local index-space */
112 hypre_Index dir; /* lives on neighbor index-space */
113 hypre_Index stride; /* lives on local index-space */
114 hypre_Index ghstride; /* GEC1002 the ghost equivalent of strides */
115
116} hypre_SStructNMapInfo;
117
118typedef struct hypre_SStructGrid_struct
119{
120 MPI_Comm comm;
121 int ndim;
122 int nparts;
123
124 /* s-variable info */
125 hypre_SStructPGrid **pgrids;
126
127 /* neighbor info */
128 int *nneighbors;
129 hypre_SStructNeighbor **neighbors;
130 int **nvneighbors;
131 hypre_SStructNeighbor ***vneighbors;
132
133 /* u-variables info: During construction, array entries are consecutive.
134 * After 'Assemble', entries are referenced via local cell rank. */
135 int nucvars;
136 hypre_SStructUCVar **ucvars;
137
138 /* info for mapping (part, index, var) --> rank */
139 hypre_BoxMap ***maps; /* map for each part, var */
140 hypre_SStructMapInfo ***info;
141 hypre_SStructNMapInfo ***ninfo;
142 HYPRE_BigInt start_rank;
143
144 int local_size; /* Number of variables locally */
145 HYPRE_BigInt global_size; /* Total number of variables */
146
147 int ref_count;
148
149 /* GEC0902 additions for ghost expansion of boxes */
150
151 int ghlocal_size; /* GEC0902 Number of vars including ghosts */
152 HYPRE_BigInt ghstart_rank; /* GEC0902 start rank including ghosts */
153
154} hypre_SStructGrid;
155
156/*--------------------------------------------------------------------------
157 * Accessor macros: hypre_SStructGrid
158 *--------------------------------------------------------------------------*/
159
160#define hypre_SStructGridComm(grid) ((grid) -> comm)
161#define hypre_SStructGridNDim(grid) ((grid) -> ndim)
162#define hypre_SStructGridNParts(grid) ((grid) -> nparts)
163#define hypre_SStructGridPGrids(grid) ((grid) -> pgrids)
164#define hypre_SStructGridPGrid(grid, part) ((grid) -> pgrids[part])
165#define hypre_SStructGridNNeighbors(grid) ((grid) -> nneighbors)
166#define hypre_SStructGridNeighbors(grid) ((grid) -> neighbors)
167#define hypre_SStructGridNVNeighbors(grid) ((grid) -> nvneighbors)
168#define hypre_SStructGridVNeighbors(grid) ((grid) -> vneighbors)
169#define hypre_SStructGridNUCVars(grid) ((grid) -> nucvars)
170#define hypre_SStructGridUCVars(grid) ((grid) -> ucvars)
171#define hypre_SStructGridUCVar(grid, i) ((grid) -> ucvars[i])
172#define hypre_SStructGridMaps(grid) ((grid) -> maps)
173#define hypre_SStructGridMap(grid, part, var) ((grid) -> maps[part][var])
174#define hypre_SStructGridInfo(grid) ((grid) -> info)
175#define hypre_SStructGridNInfo(grid) ((grid) -> ninfo)
176#define hypre_SStructGridStartRank(grid) ((grid) -> start_rank)
177#define hypre_SStructGridLocalSize(grid) ((grid) -> local_size)
178#define hypre_SStructGridGlobalSize(grid) ((grid) -> global_size)
179#define hypre_SStructGridRefCount(grid) ((grid) -> ref_count)
180#define hypre_SStructGridGhlocalSize(grid) ((grid) -> ghlocal_size)
181#define hypre_SStructGridGhstartRank(grid) ((grid) -> ghstart_rank)
182
183/*--------------------------------------------------------------------------
184 * Accessor macros: hypre_SStructPGrid
185 *--------------------------------------------------------------------------*/
186
187#define hypre_SStructPGridComm(pgrid) ((pgrid) -> comm)
188#define hypre_SStructPGridNDim(pgrid) ((pgrid) -> ndim)
189#define hypre_SStructPGridNVars(pgrid) ((pgrid) -> nvars)
190#define hypre_SStructPGridVarTypes(pgrid) ((pgrid) -> vartypes)
191#define hypre_SStructPGridVarType(pgrid, var) ((pgrid) -> vartypes[var])
192#define hypre_SStructPGridCellSGridDone(pgrid) ((pgrid) -> cell_sgrid_done)
193
194#define hypre_SStructPGridSGrids(pgrid) ((pgrid) -> sgrids)
195#define hypre_SStructPGridSGrid(pgrid, var) \
196((pgrid) -> sgrids[hypre_SStructPGridVarType(pgrid, var)])
197#define hypre_SStructPGridCellSGrid(pgrid) \
198((pgrid) -> sgrids[HYPRE_SSTRUCT_VARIABLE_CELL])
199#define hypre_SStructPGridVTSGrid(pgrid, vartype) ((pgrid) -> sgrids[vartype])
200
201#define hypre_SStructPGridIBoxArrays(pgrid) ((pgrid) -> iboxarrays)
202#define hypre_SStructPGridIBoxArray(pgrid, var) \
203((pgrid) -> iboxarrays[hypre_SStructPGridVarType(pgrid, var)])
204#define hypre_SStructPGridCellIBoxArray(pgrid) \
205((pgrid) -> iboxarrays[HYPRE_SSTRUCT_VARIABLE_CELL])
206#define hypre_SStructPGridVTIBoxArray(pgrid, vartype) \
207((pgrid) -> iboxarrays[vartype])
208
209#define hypre_SStructPGridPNeighbors(pgrid) ((pgrid) -> pneighbors)
210#define hypre_SStructPGridLocalSize(pgrid) ((pgrid) -> local_size)
211#define hypre_SStructPGridGlobalSize(pgrid) ((pgrid) -> global_size)
212#define hypre_SStructPGridPeriodic(pgrid) ((pgrid) -> periodic)
213#define hypre_SStructPGridGhlocalSize(pgrid) ((pgrid) -> ghlocal_size)
214
215/*--------------------------------------------------------------------------
216 * Accessor macros: hypre_SStructMapInfo
217 *--------------------------------------------------------------------------*/
218
219#define hypre_SStructMapInfoType(info) ((info) -> type)
220#define hypre_SStructMapInfoProc(info) ((info) -> proc)
221#define hypre_SStructMapInfoOffset(info) ((info) -> offset)
222#define hypre_SStructMapInfoBox(info) ((info) -> box)
223#define hypre_SStructMapInfoGhoffset(info) ((info) -> ghoffset)
224
225/*--------------------------------------------------------------------------
226 * Accessor macros: hypre_SStructNMapInfo
227 *--------------------------------------------------------------------------*/
228
229/* Use the MapInfo macros to access the first five structure components */
230
231#define hypre_SStructNMapInfoPart(info) ((info) -> part)
232#define hypre_SStructNMapInfoILower(info) ((info) -> ilower)
233#define hypre_SStructNMapInfoCoord(info) ((info) -> coord)
234#define hypre_SStructNMapInfoDir(info) ((info) -> dir)
235#define hypre_SStructNMapInfoStride(info) ((info) -> stride)
236#define hypre_SStructNMapInfoGhstride(info) ((info) -> ghstride)
237
238/*--------------------------------------------------------------------------
239 * Accessor macros: hypre_SStructNeighbor
240 *--------------------------------------------------------------------------*/
241
242#define hypre_SStructNeighborBox(neighbor) &((neighbor) -> box)
243#define hypre_SStructNeighborPart(neighbor) ((neighbor) -> part)
244#define hypre_SStructNeighborILower(neighbor) ((neighbor) -> ilower)
245#define hypre_SStructNeighborCoord(neighbor) ((neighbor) -> coord)
246#define hypre_SStructNeighborDir(neighbor) ((neighbor) -> dir)
247#define hypre_SStructNeighborPrimary(neighbor) ((neighbor) -> primary)
248
249/*--------------------------------------------------------------------------
250 * Accessor macros: hypre_SStructUCVar
251 *--------------------------------------------------------------------------*/
252
253#define hypre_SStructUCVarPart(uc) ((uc) -> part)
254#define hypre_SStructUCVarCell(uc) ((uc) -> cell)
255#define hypre_SStructUCVarNUVars(uc) ((uc) -> nuvars)
256#define hypre_SStructUCVarUVars(uc) ((uc) -> uvars)
257#define hypre_SStructUCVarType(uc, i) ((uc) -> uvars[i].type)
258#define hypre_SStructUCVarRank(uc, i) ((uc) -> uvars[i].rank)
259#define hypre_SStructUCVarProc(uc, i) ((uc) -> uvars[i].proc)
260
261#endif
262
Note: See TracBrowser for help on using the repository browser.