17 #include <deal.II/base/utilities.h> 18 #include <deal.II/base/memory_consumption.h> 19 #include <deal.II/base/logstream.h> 20 #include <deal.II/lac/sparsity_tools.h> 21 #include <deal.II/lac/sparsity_pattern.h> 22 #include <deal.II/grid/tria.h> 23 #include <deal.II/grid/tria_accessor.h> 24 #include <deal.II/grid/tria_iterator.h> 25 #include <deal.II/grid/grid_tools.h> 26 #include <deal.II/distributed/tria_base.h> 35 DEAL_II_NAMESPACE_OPEN
40 template <
int dim,
int spacedim>
42 const typename ::Triangulation<dim,spacedim>::MeshSmoothing smooth_grid,
43 const bool check_for_distorted_cells)
45 ::
Triangulation<dim,spacedim>(smooth_grid,check_for_distorted_cells),
47 duplicate_communicator(mpi_communicator)),
48 my_subdomain (
Utilities::MPI::this_mpi_process (this->mpi_communicator)),
49 n_subdomains(
Utilities::MPI::n_mpi_processes(mpi_communicator))
51 #ifndef DEAL_II_WITH_MPI 53 "which parallel::Triangulation is not available."));
55 number_cache.n_locally_owned_active_cells.resize (n_subdomains);
58 template <
int dim,
int spacedim>
62 #ifndef DEAL_II_WITH_MPI 63 Assert(
false, ExcNotImplemented());
65 if (const ::parallel::Triangulation<dim,spacedim> *
66 old_tria_x =
dynamic_cast<const ::parallel::Triangulation<dim,spacedim> *
>(&old_tria))
74 template <
int dim,
int spacedim>
89 template <
int dim,
int spacedim>
92 #ifdef DEAL_II_WITH_MPI 94 MPI_Comm_free (&this->mpi_communicator);
98 template <
int dim,
int spacedim>
105 template <
int dim,
int spacedim>
109 return number_cache.n_locally_owned_active_cells[my_subdomain];
112 template <
int dim,
int spacedim>
119 template <
int dim,
int spacedim>
126 template <
int dim,
int spacedim>
127 const std::vector<unsigned int> &
133 template <
int dim,
int spacedim>
137 return mpi_communicator;
140 #ifdef DEAL_II_WITH_MPI 141 template <
int dim,
int spacedim>
150 std::fill (
number_cache.n_locally_owned_active_cells.begin(),
176 if (cell->is_ghost())
185 cell != this->
end(); ++cell)
186 if (cell->subdomain_id() == my_subdomain)
187 ++
number_cache.n_locally_owned_active_cells[my_subdomain];
189 unsigned int send_value
190 =
number_cache.n_locally_owned_active_cells[my_subdomain];
191 MPI_Allgather (&send_value,
197 this->mpi_communicator);
200 = std::accumulate (
number_cache.n_locally_owned_active_cells.begin(),
207 template <
int dim,
int spacedim>
211 Assert (
false, ExcNotImplemented());
216 template <
int dim,
int spacedim>
220 Assert (dim > 1, ExcNotImplemented());
224 template <
int dim,
int spacedim>
225 const std::set<unsigned int> &
232 template <
int dim,
int spacedim>
233 const std::set<unsigned int> &
246 #include "tria_base.inst" 248 DEAL_II_NAMESPACE_CLOSE
::internal::Triangulation::NumberCache< dim > number_cache
::ExceptionBase & ExcMessage(std::string arg1)
virtual void copy_triangulation(const Triangulation< dim, spacedim > &old_tria)
active_cell_iterator begin_active(const unsigned int level=0) const
unsigned int n_levels() const
cell_iterator end() const
unsigned int global_dof_index
#define Assert(cond, exc)
virtual std::size_t memory_consumption() const
unsigned int subdomain_id
virtual types::global_dof_index n_global_active_cells() const
unsigned int n_mpi_processes(const MPI_Comm &mpi_communicator)
std_cxx11::enable_if< std_cxx11::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
MPI_Comm duplicate_communicator(const MPI_Comm &mpi_communicator)
virtual unsigned int n_global_levels() const
Triangulation(MPI_Comm mpi_communicator, const typename ::Triangulation< dim, spacedim >::MeshSmoothing smooth_grid=(::Triangulation< dim, spacedim >::none), const bool check_for_distorted_cells=false)
T max(const T &t, const MPI_Comm &mpi_communicator)
virtual types::subdomain_id locally_owned_subdomain() const