Listing 2: The sequential program

int main(int argc, char* argv[])
{
  Pooma::initialize(argc,argv);

  int n, nuDiffusions;
  double alpha;
  const double beta = 
    2.0 /* 2 created */ - 1.0 /* one consumed */;
  if (!processCommandLine(argc, argv, n, nuDiffusions, alpha))
    return EXIT_FAILURE;

  Interval<2> interiorDomain(Interval<1>(1,n-2), 
                             Interval<1>(1,n-2));
  Array<2> Na(n,n), Nb(n,n);

  Na = Nb = 0.0;
  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);
  }
  std::cout << (nuDiffusions % 2 ? Na(n/2,n/2) : Nb(n/2,n/2))
            << std::endl;

  Pooma::finalize();
  return EXIT_SUCCESS;
}
— End of Listing —