46#include <blitz/array.h>
70 blitz::Array<blitz::Array<real, 3>, 1> pressureData;
71 blitz::Array<blitz::Array<real, 3>, 1> residualData;
72 blitz::Array<blitz::Array<real, 3>, 1> tmpDataArray;
73 blitz::Array<blitz::Array<real, 3>, 1> smoothedPres;
75 blitz::Array<blitz::RectDomain<3>, 1> stagFull;
76 blitz::Array<blitz::RectDomain<3>, 1> stagCore;
77 blitz::Array<int, 1> xEnd, yEnd, zEnd;
79 blitz::Array<int, 1> mgSizeArray;
80 blitz::Array<int, 1> strideValues;
82 blitz::TinyVector<int, 3> localSizeIndex;
84 blitz::Array<MPI_Request, 1> recvRequest;
85 blitz::Array<MPI_Status, 1> recvStatus;
87 blitz::Array<real, 1> hx, hy, hz;
88 blitz::Array<real, 1> hx2, hz2, hzhx;
89 blitz::Array<real, 1> hxhy, hyhz, hxhyhz;
91 blitz::Array<blitz::Array<real, 1>, 1> xixx, xix2;
92 blitz::Array<blitz::Array<real, 1>, 1> etyy, ety2;
93 blitz::Array<blitz::Array<real, 1>, 1> ztzz, ztz2;
95 blitz::Array<MPI_Datatype, 1> xMGArray;
96 blitz::Array<MPI_Datatype, 1> yMGArray;
98 blitz::Array<blitz::TinyVector<int, 3>, 1> mgSendLft, mgSendRgt;
99 blitz::Array<blitz::TinyVector<int, 3>, 1> mgRecvLft, mgRecvRgt;
101 blitz::Array<blitz::TinyVector<int, 3>, 1> mgSendFrn, mgSendBak;
102 blitz::Array<blitz::TinyVector<int, 3>, 1> mgRecvFrn, mgRecvBak;
104 static inline bool isOdd(
int x) {
return x % 2; };
115 virtual void smooth(
const int smoothCount);
118 virtual void solve() {};
121 virtual void updatePads(blitz::Array<blitz::Array<real, 3>, 1> &data);
160 void computeResidual();
161 void smooth(
const int smoothCount);
162 real computeError(
const int normOrder);
167 void initDirichlet();
169 void createMGSubArrays();
170 void updatePads(blitz::Array<blitz::Array<real, 3>, 1> &data);
172 blitz::Array<real, 1> xWall, zWall;
197 void computeResidual();
198 void smooth(
const int smoothCount);
199 real computeError(
const int normOrder);
204 void initDirichlet();
206 void createMGSubArrays();
207 void updatePads(blitz::Array<blitz::Array<real, 3>, 1> &data);
209 blitz::Array<real, 2> xWall, yWall, zWall;
Contains all the global variables related to the grid, its slices, limits, and grid derivatives used ...
Definition: grid.h:53
The derived class from poisson to perform multi-grid operations on a 2D grid.
Definition: poisson.h:156
real testTransfer()
Function to test whether strided data transfer is performing as expected.
Definition: poisson_d2.cc:510
real testPeriodic()
Function to test whether periodic BC is being implemented properly.
Definition: poisson_d2.cc:553
multigrid_d2(const grid &mesh, const parser &solParam)
Constructor of the multigrid_d2 class derived from the poisson class.
Definition: poisson_d2.cc:64
real testProlong()
Function to test whether prolongation operations are interpolating correctly.
Definition: poisson_d2.cc:481
The derived class from poisson to perform multi-grid operations on a 3D grid.
Definition: poisson.h:193
multigrid_d3(const grid &mesh, const parser &solParam)
Constructor of the multigrid_d3 class derived from the poisson class.
Definition: poisson_d3.cc:64
real testProlong()
Function to test whether prolongation operations are interpolating correctly.
Definition: poisson_d3.cc:689
real testTransfer()
Function to test whether strided data transfer is performing as expected.
Definition: poisson_d3.cc:722
real testPeriodic()
Function to test whether periodic BC is being implemented properly.
Definition: poisson_d3.cc:780
Contains all the global variables set by the user through the yaml file.
Definition: parser.h:63
Plain scalar field class to store simple scalar fields with no differentiation or interpolation.
Definition: plainsf.h:51
The base class poisson and its derived classes multigrid_d2 and multigrid_d3.
Definition: poisson.h:54
virtual real testPeriodic()
Function to test whether periodic BC is being implemented properly.
Definition: poisson.cc:643
void setLocalSizeIndex()
Function to calculate the local size indices of sub-domains after MPI domain decomposition.
Definition: poisson.cc:377
virtual void smooth(const int smoothCount)
Function to perform smoothing operation on the input array.
Definition: poisson.cc:550
virtual void imposeBC()
Function to impose the boundary conditions of Poisson solver at different levels of the V-cycle.
Definition: poisson.cc:578
virtual real testProlong()
Function to test whether prolongation operations are interpolating correctly.
Definition: poisson.cc:631
virtual void coarsen()
Function to coarsen the grid down the levels of the V-Cycle.
Definition: poisson.cc:509
void copyStaggrDerivs()
Function to copy the staggered grid derivatives from the grid class to local arrays.
Definition: poisson.cc:453
void setCoefficients()
Function to set the coefficients used for calculating laplacian and in smoothing.
Definition: poisson.cc:399
void initializeArrays()
Function to initialize the arrays used in multi-grid.
Definition: poisson.cc:293
virtual void computeResidual()
Function to compute the residual at the start of each V-Cycle.
Definition: poisson.cc:535
void mgSolve(plainsf &inFn, const plainsf &rhs)
The core, publicly accessible function of poisson to compute the solution for the Poisson equation.
Definition: poisson.cc:100
void setStagBounds()
Function to set the RectDomain variables for all future references throughout the poisson solver.
Definition: poisson.cc:326
virtual real testTransfer()
Function to test whether strided data transfer is performing as expected.
Definition: poisson.cc:619
virtual void prolong()
Function to perform prolongation on the array being solved.
Definition: poisson.cc:522
void vCycle()
Function to perform one loop of V-cycle.
Definition: poisson.cc:219
virtual void createMGSubArrays()
Function to create the MPI sub-array data types necessary to transfer data across sub-domains.
Definition: poisson.cc:606
poisson(const grid &mesh, const parser &solParam)
Constructor of the base poisson class.
Definition: poisson.cc:62
virtual void updatePads(blitz::Array< blitz::Array< real, 3 >, 1 > &data)
Function to update the pad points of the local sub-domains at different levels of the V-cycle.
Definition: poisson.cc:591
virtual real computeError(const int normOrder)
Function to compute the error at the end of each V-Cycle.
Definition: poisson.cc:563
Class declaration of grid.
Class declaration of plainsf - plain scalar field.