Example #1
0
 inline closed_region_iterator_pair<const Ct>
 closed_region_range(const Ct& container,
                     const typename container_traits<Ct>::key_type& lower,
                     const typename container_traits<Ct>::key_type& upper)
 {
   return region_range(container, make_closed_bounds(container, lower, upper));
 }
  void merge_meshes_impl(viennagrid::base_mesh<mesh_is_const> const & src_mesh,
                         viennagrid::mesh const & dst_mesh,
                         double tolerance, bool region_offset)
  {
    viennagrid::result_of::element_copy_map<>::type copy_map(dst_mesh, tolerance, false);

    typedef viennagrid::base_mesh<mesh_is_const>                                    SrcMeshType;

    typedef typename viennagrid::result_of::element<SrcMeshType>::type              CellType;

    typedef typename viennagrid::result_of::const_cell_range<SrcMeshType>::type     ConstCellRangeType;
    typedef typename viennagrid::result_of::iterator<ConstCellRangeType>::type      ConstCellIteratorType;

    typedef typename viennagrid::result_of::region_range<SrcMeshType>::type         SrcRegionRangeType;
    typedef typename viennagrid::result_of::iterator<SrcRegionRangeType>::type      SrcRegionRangeIterator;

    int region_id_offset = dst_mesh.region_count();
    int source_region_count = src_mesh.region_count();

    ConstCellRangeType cells(src_mesh);
    for (ConstCellIteratorType cit = cells.begin(); cit != cells.end(); ++cit)
    {
      CellType cell = copy_map(*cit);

      if (source_region_count <= 1)
        viennagrid::add( dst_mesh.get_or_create_region(region_offset ? region_id_offset : 0), cell );
      else
      {
        SrcRegionRangeType region_range(*cit);
        for (SrcRegionRangeIterator rit = region_range.begin(); rit != region_range.end(); ++rit)
        {
          viennagrid::add( dst_mesh.get_or_create_region((*rit).id() + (region_offset ? region_id_offset : 0)), cell );
        }
      }
    }
  }