#include "Pooma/Arrays.h"
int main(int argc, char* argv[])
{
Pooma::initialize(argc,argv);
Inform output;
int nuProcessors, n, nuDiffusions;
double alpha;
const double beta =
2.0 /* 2 created */ - 1.0 /* one consumed */;
if (!processCommandLine(argc, argv, output,
nuProcessors, n, nuDiffusions, alpha))
return EXIT_FAILURE;
Interval<1> N(0, n-1);
Interval<2> vertDomain(N, N);
Interval<1> I(1,n-2);
Interval<2> interiorDomain(I,I);
UniformGridPartition<2> partition
(Loc<2>(nuProcessors, nuProcessors),
GuardLayers<2>(1),
GuardLayers<2>(0));
UniformGridLayout<2> layout
(vertDomain, partition, DistributedTag());
Array<2, double, MultiPatch<UniformTag, Remote<Brick> > > Na
(layout);
Array<2, double, MultiPatch<UniformTag, Remote<Brick> > > Nb
(layout);
Na = Nb = 0.0;
Pooma::blockAndEvaluate();
Nb(n/2,n/2) = 1.0e+7;
Fisher fisher(alpha, beta);
Stencil<Fisher> stencil(fisher);
for (int k = 0; k < nuDiffusions; k += 2) {
Na(interiorDomain) = stencil(Nb, interiorDomain);
Nb(interiorDomain) = stencil(Na, interiorDomain);
}
Pooma::blockAndEvaluate();
output << (nuDiffusions % 2 ? Na(n/2,n/2) : Nb(n/2,n/2))
<< std::endl;
Pooma::finalize();
return EXIT_SUCCESS;
}
End of Listing