Exemple #1
0
void ASMHandler<GridType>::determineAdjacencyPattern()
{
  adjacencyPattern.resize(maxeqn);

  const LeafIndexSet& set = gv.leafView().indexSet();
  LeafIterator itend = gv.leafView().template end<0>();

  // iterate over cells
  for (LeafIterator it = gv.leafView().template begin<0>(); it != itend; ++it) {
    Dune::GeometryType gt = it->type();
    const Dune::template GenericReferenceElement<double,dim>& ref =
      Dune::GenericReferenceElements<double,dim>::general(gt);

    int vertexsize = ref.size(dim);
    for (int i=0; i < vertexsize; i++) {
      int indexi = set.subIndex(*it,i,dim);
      for (int k=0;k<dim;++k) {
        MPC* mpc = getMPC(indexi,k);
        if (mpc) {
          for (int l=0;l<mpc->getNoMaster();++l) {
            nodeAdjacency(it,vertexsize,
                          meqn[mpc->getMaster(l).node*dim+
                               mpc->getMaster(l).dof-1]);
          }
        } else
          nodeAdjacency(it,vertexsize,meqn[indexi*dim+k]);
      }
    }
  }
}
void ASMHandler<GridType>::determineAdjacencyPattern()
{
  adjacencyPattern.resize(maxeqn);
  std::cout << "\tsetting up sparsity pattern..." << std::endl;
  LoggerHelper help(gv.size(0), 5, 50000);

  const LeafIndexSet& set = gv.leafView().indexSet();
  LeafIterator itend = gv.leafView().template end<0>();

  // iterate over cells
  int cell=0;
  for (LeafIterator it = gv.leafView().template begin<0>(); it != itend; ++it, ++cell) {
    Dune::GeometryType gt = it->type();

#if DUNE_VERSION_NEWER(DUNE_GRID, 2, 3)
    const Dune::template ReferenceElement<double,dim>& ref =
      Dune::ReferenceElements<double,dim>::general(gt);
#else
    const Dune::template GenericReferenceElement<double,dim>& ref =
      Dune::GenericReferenceElements<double,dim>::general(gt);
#endif

    int vertexsize = ref.size(dim);
    for (int i=0; i < vertexsize; i++) {
      int indexi = set.subIndex(*it,i,dim);
      for (int k=0;k<dim;++k) {
        MPC* mpc = getMPC(indexi,k);
        if (mpc) {
          for (size_t l=0;l<mpc->getNoMaster();++l) {
            nodeAdjacency(it,vertexsize,
                          meqn[mpc->getMaster(l).node*dim+
                               mpc->getMaster(l).dof-1]);
          }
        } else
          nodeAdjacency(it,vertexsize,meqn[indexi*dim+k]);
      }
    }
    help.log(cell, "\t\t... still processing ... cell ");
  }
}