1 #ifndef __TEST_FIXTURES_H__ 2 #define __TEST_FIXTURES_H__ 9 template<
typename Gr
idType>
13 int numDim = gridSizes.size();
14 std::vector<double> dX(numDim,0);
15 size_t numGlobalNodes = 1;
16 size_t numGlobalCells = 1;
18 for(
int iDim = 0;iDim < numDim;iDim++){
19 numGlobalNodes *= gridSizes[iDim];
20 numGlobalCells *= (gridSizes[iDim]-1);
21 dX[iDim] = 1.0/
static_cast<double>(gridSizes[iDim]-1);
24 inGrid.SetGridSizes(gridSizes);
25 inGrid.SetGridSpacings(dX);
30 template<
typename Gr
idType,
typename HaloType>
36 std::ostream *messageStreamPtr = NULL)
39 int numProc = inComm.
Size();
40 int myRank = inComm.
Rank();
44 messageStreamPtr = &std::cout;
48 int numDim = gridSizes.size();
49 std::vector<double> dX(numDim,0);
50 std::vector<double> physicalExtent(2*numDim,1.0);
51 size_t numGlobalNodes = 1;
52 size_t numGlobalCells = 1;
54 for(
int iDim = 0;iDim < numDim;iDim++){
55 physicalExtent[2*iDim] = 0.0;
56 numGlobalNodes *= gridSizes[iDim];
57 numGlobalCells *= (gridSizes[iDim]-1);
58 dX[iDim] = 1.0/
static_cast<double>(gridSizes[iDim]-1);
61 inGrid.SetGridSizes(gridSizes);
62 inGrid.SetGridSpacings(dX);
63 inGrid.SetPhysicalExtent(physicalExtent);
68 std::vector<int> haloDepths(2*numDim,boundaryDepth);
78 std::vector<int> &cartCoords(gridComm.CartCoordinates());
79 std::vector<int> &cartDims(gridComm.CartDimensions());
90 partitionInterval,*messageStreamPtr)){
91 *messageStreamPtr <<
"TestFixtures:SetupSimulationFixtures:Error: Partitioning failed." << std::endl;
95 std::vector<size_t> extendGrid(2*numDim,0);
96 std::vector<bool> isPeriodic(numDim,
true);
97 size_t numPointsPart = partitionInterval.NNodes();
98 std::vector<bool> haveNeighbors(2*numDim,
true);
100 for(
int iDim = 0;iDim < numDim; iDim++){
101 if(isPeriodic[iDim]){
102 extendGrid[2*iDim] = haloDepths[2*iDim];
103 extendGrid[2*iDim+1] = haloDepths[2*iDim+1];
105 if(partitionInterval[iDim].first == 0) {
106 haveNeighbors[2*iDim] =
false;
108 extendGrid[2*iDim] = haloDepths[2*iDim];
110 if(partitionInterval[iDim].second == (gridSizes[iDim]-1)){
111 haveNeighbors[2*iDim+1] =
false;
113 extendGrid[2*iDim + 1] = haloDepths[2*iDim+1];
118 inGrid.SetDimensionExtensions(extendGrid);
120 if(inGrid.Finalize()){
121 *messageStreamPtr <<
"TestFixtures:SetupSimulationFixtures:Error: Grid finalization failed." << std::endl;
125 inGrid.GenerateCoordinates(*messageStreamPtr);
127 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
133 inHalo.SetGridInterval(globalInterval);
134 inHalo.SetPartitionInterval(partitionInterval);
138 inHalo.SetNeighbors(haveNeighbors);
139 inHalo.SetPeriodicDirs(pbsCartInfo.
isPeriodic);
141 std::vector<pcpp::IndexIntervalType> remoteHaloExtents(inHalo.CreateRemoteHaloExtents(extendGrid));
142 std::vector<pcpp::IndexIntervalType> localHaloExtents(inHalo.CreateLocalHaloExtents(extendGrid));
145 inHalo.SetLocalPartitionExtent(partitionBufferInterval);
147 inHalo.SetRemoteHaloExtents(remoteHaloExtents);
148 inHalo.SetLocalHaloExtents(localHaloExtents);
150 const std::vector<pcpp::IndexIntervalType> &remoteHaloBufferExtents(inHalo.RemoteHaloBufferExtents());
151 const std::vector<pcpp::IndexIntervalType> &localHaloBufferExtents(inHalo.LocalHaloBufferExtents());
153 inHalo.CreateSimpleSendIndices();
154 inHalo.CreateSimpleRecvIndices();
160 template<
typename Gr
idType,
typename HaloType>
167 std::ostream *messageStreamPtr = NULL)
170 int numProc = inComm.
Size();
171 int myRank = inComm.
Rank();
173 if(!messageStreamPtr)
174 messageStreamPtr = &std::cout;
178 int numDim = gridSizes.size();
179 std::vector<double> dX(numDim,0);
180 size_t numGlobalNodes = 1;
181 size_t numGlobalCells = 1;
183 std::vector<double> &physicalExtent(inGrid.PhysicalExtent());
184 if(physicalExtent.empty()){
185 physicalExtent.resize(numDim*2,0);
186 for(
int iDim = 0;iDim < numDim;iDim++)
187 physicalExtent[2*iDim+1] = 20.0;
190 for(
int iDim = 0;iDim < numDim;iDim++){
191 numGlobalNodes *= gridSizes[iDim];
192 numGlobalCells *= (gridSizes[iDim]-1);
193 dX[iDim] = (physicalExtent[2*iDim+1] - physicalExtent[2*iDim])/static_cast<double>(gridSizes[iDim]-1);
196 inGrid.SetGridSizes(gridSizes);
197 inGrid.SetGridSpacings(dX);
200 int boundaryDepth = coeffsWENO.
HaloWidth();
202 boundaryDepth = std::max(boundaryWidth,boundaryDepth);
204 std::vector<int> haloDepths(2*numDim,boundaryDepth);
214 std::vector<int> &cartCoords(gridComm.CartCoordinates());
215 std::vector<int> &cartDims(gridComm.CartDimensions());
226 partitionInterval,*messageStreamPtr)){
227 *messageStreamPtr <<
"TestFixtures:SetupSimulationFixtures:Error: Partitioning failed." << std::endl;
231 std::vector<size_t> extendGrid(2*numDim,0);
232 std::vector<bool> isPeriodic(numDim,
true);
233 size_t numPointsPart = partitionInterval.NNodes();
235 for(
int iDim = 0;iDim < numDim; iDim++){
236 if(isPeriodic[iDim]){
237 extendGrid[2*iDim] = haloDepths[2*iDim];
238 extendGrid[2*iDim+1] = haloDepths[2*iDim+1];
240 if(partitionInterval[iDim].first != 0)
241 extendGrid[2*iDim] = haloDepths[2*iDim];
242 if(partitionInterval[iDim].second != (gridSizes[iDim]-1))
243 extendGrid[2*iDim + 1] = haloDepths[2*iDim+1];
247 inGrid.SetDimensionExtensions(extendGrid);
248 if(inGrid.Finalize()){
249 *messageStreamPtr <<
"TestFixtures:SetupSimulationFixtures:Error: Grid finalization failed." << std::endl;
253 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
259 inHalo.SetGridInterval(globalInterval);
260 inHalo.SetPartitionInterval(partitionInterval);
264 std::vector<bool> haveNeighbors(2*numDim,
true);
265 inHalo.SetNeighbors(haveNeighbors);
266 inHalo.SetPeriodicDirs(pbsCartInfo.
isPeriodic);
268 std::vector<pcpp::IndexIntervalType> remoteHaloExtents(inHalo.CreateRemoteHaloExtents(extendGrid));
269 std::vector<pcpp::IndexIntervalType> localHaloExtents(inHalo.CreateLocalHaloExtents(extendGrid));
272 inHalo.SetLocalPartitionExtent(partitionBufferInterval);
274 inHalo.SetRemoteHaloExtents(remoteHaloExtents);
275 inHalo.SetLocalHaloExtents(localHaloExtents);
277 const std::vector<pcpp::IndexIntervalType> &remoteHaloBufferExtents(inHalo.RemoteHaloBufferExtents());
278 const std::vector<pcpp::IndexIntervalType> &localHaloBufferExtents(inHalo.LocalHaloBufferExtents());
280 inHalo.CreateSimpleSendIndices();
281 inHalo.CreateSimpleRecvIndices();
287 template<
typename Gr
idType>
292 std::ostream *messageStreamPtr = NULL)
296 if(!messageStreamPtr)
297 messageStreamPtr = &std::cout;
299 int numDim = gridSizes.size();
300 std::vector<double> dX(numDim,0);
301 size_t numGlobalNodes = 1;
302 size_t numGlobalCells = 1;
305 for(
int iDim = 0;iDim < numDim;iDim++){
306 numGlobalNodes *= gridSizes[iDim];
307 numGlobalCells *= (gridSizes[iDim]-1);
308 dX[iDim] = 1.0/
static_cast<double>(gridSizes[iDim]-1);
311 inGrid.SetGridSizes(gridSizes);
315 std::vector<int> haloDepths(2*numDim,boundaryDepth);
321 std::vector<size_t> extendGrid(2*numDim,0);
322 std::vector<bool> isPeriodic(numDim,
true);
323 size_t numPointsPart = partitionInterval.NNodes();
325 for(
int iDim = 0;iDim < numDim; iDim++){
326 if(isPeriodic[iDim]){
327 extendGrid[2*iDim] = haloDepths[2*iDim];
328 extendGrid[2*iDim+1] = haloDepths[2*iDim+1];
330 if(partitionInterval[iDim].first == 0)
331 extendGrid[2*iDim] = haloDepths[2*iDim];
332 if(partitionInterval[iDim].second == (gridSizes[iDim]-1))
333 extendGrid[2*iDim + 1] = haloDepths[2*iDim+1];
337 inGrid.SetDimensionExtensions(extendGrid);
338 if(inGrid.Finalize()){
339 *messageStreamPtr <<
"TestFixtures:SetupSimulationFixtures:Error: Grid finalization failed." << std::endl;
343 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
int CreateSimpleGrid(GridType &inGrid, const std::vector< size_t > &gridSizes)
void const size_t const size_t * gridSizes
void CartesianSetup(std::ostream &outStream, const std::vector< int > &cartCoords, const std::vector< int > &cartDims)
std::vector< int > isPeriodic
int CreateSerialSimulationFixtures(GridType &inGrid, plascom2::operators::sbp::base &inOperator, const std::vector< size_t > &gridSizes, int interiorOrder, std::ostream *messageStreamPtr=NULL)
Main encapsulation of MPI.
Encapsulation for a collection of operator stencils.
int CreateSimulationFixtures(GridType &inGrid, HaloType &inHalo, plascom2::operators::sbp::base &inOperator, const std::vector< size_t > &gridSizes, int interiorOrder, pcpp::CommunicatorType &inComm, std::ostream *messageStreamPtr=NULL)
void const size_t const size_t * bufferSizes
int PartitionCartesianInterval(const pcpp::IndexIntervalType &globalExtent, const std::vector< int > &cartDims, const std::vector< int > &cartCoords, pcpp::IndexIntervalType &partExtent, std::ostream &messageStream)
Get local sub-interval of an n-dimensional integer interval.
int boundaryWidth
Boundary width is the size of the on-boundary stencil.
int SetupCartesianTopology(pcpp::CommunicatorType ¶llelCommunicator, pcpp::ParallelTopologyInfoType &topologyInfo, pcpp::CommunicatorType &topoCommunicator, std::ostream &messageStream)
Sets up a communicator with Cartesian topology.
int numStencils
The number of stencils (e.g. interior + boundary)
int Initialize(base &stencilSet, int interiorOrder)
Initialize the sbp::base stencilset with the SBP operator of given order.
Simple Block Structured Mesh object.
void InitSimple(const ContainerType &inSize)
void const size_t * numPointsBuffer