16 #include <deal.II/base/memory_consumption.h> 17 #include <deal.II/grid/tria_objects.h> 18 #include <deal.II/grid/tria.h> 19 #include <deal.II/grid/tria_iterator.h> 20 #include <deal.II/grid/tria_accessor.h> 27 DEAL_II_NAMESPACE_OPEN
36 const unsigned int new_objects_single)
38 Assert(new_objects_in_pairs%2==0, ExcInternalError());
42 reverse_order_next_free_single=
false;
46 unsigned int n_objects=0;
47 unsigned int n_unused_pairs=0;
48 unsigned int n_unused_singles=0;
49 for (
unsigned int i=0; i<used.size(); ++i)
53 else if (i+1<used.size())
58 if (next_free_single==0)
64 if (next_free_pair==0)
72 Assert(n_objects+2*n_unused_pairs+n_unused_singles==used.size(),
77 const int additional_single_objects=
78 new_objects_single-n_unused_singles;
80 unsigned int new_size=
81 used.size() + new_objects_in_pairs - 2*n_unused_pairs;
82 if (additional_single_objects>0)
83 new_size+=additional_single_objects;
86 if (new_size>cells.size())
88 cells.reserve (new_size);
89 cells.insert (cells.end(),
90 new_size-cells.size(),
93 used.reserve (new_size);
94 used.insert (used.end(),
98 user_flags.reserve (new_size);
99 user_flags.insert (user_flags.end(),
100 new_size-user_flags.size(),
104 children.reserve (factor*new_size);
105 children.insert (children.end(),
106 factor*new_size-children.size(),
109 if (G::dimension > 1)
111 refinement_cases.reserve (new_size);
112 refinement_cases.insert (refinement_cases.end(),
113 new_size - refinement_cases.size(),
119 boundary_or_material_id.reserve (new_size);
120 boundary_or_material_id.resize (new_size);
122 user_data.reserve (new_size);
123 user_data.resize (new_size);
125 manifold_id.reserve (new_size);
126 manifold_id.insert (manifold_id.end(),
127 new_size-manifold_id.size(),
132 if (n_unused_singles==0)
134 next_free_single=new_size-1;
135 reverse_order_next_free_single=
true;
141 template <
int dim,
int spacedim>
142 typename ::Triangulation<dim,spacedim>::raw_hex_iterator
144 const unsigned int level)
148 int pos=next_free_pair,
150 for (; pos<last; ++pos)
154 Assert(!used[pos+1], ExcInternalError());
159 return tria.end_hex();
161 next_free_pair=pos+2;
163 return typename ::Triangulation<dim,spacedim>::raw_hex_iterator(&tria,level,pos);
170 const unsigned int new_size = new_hexes +
171 std::count_if (
used.begin(),
173 std::bind2nd (std::equal_to<bool>(),
true));
176 if (new_size>
cells.size())
178 cells.reserve (new_size);
180 new_size-
cells.size(),
183 used.reserve (new_size);
185 new_size-
used.size(),
215 new_size * GeometryInfo<3>::faces_per_cell
224 face_flips.reserve (new_size * GeometryInfo<3>::faces_per_cell);
226 new_size * GeometryInfo<3>::faces_per_cell
229 face_rotations.reserve (new_size * GeometryInfo<3>::faces_per_cell);
231 new_size * GeometryInfo<3>::faces_per_cell
241 const unsigned int new_quads_single)
243 Assert(new_quads_in_pairs%2==0, ExcInternalError());
251 unsigned int n_quads=0;
252 unsigned int n_unused_pairs=0;
253 unsigned int n_unused_singles=0;
254 for (
unsigned int i=0; i<
used.size(); ++i)
258 else if (i+1<
used.size())
277 Assert(n_quads+2*n_unused_pairs+n_unused_singles==
used.size(),
281 const int additional_single_quads=
282 new_quads_single-n_unused_singles;
284 unsigned int new_size=
285 used.size() + new_quads_in_pairs - 2*n_unused_pairs;
286 if (additional_single_quads>0)
287 new_size+=additional_single_quads;
290 if (new_size>
cells.size())
296 line_orientations.insert (line_orientations.end(),
297 new_size * GeometryInfo<2>::lines_per_cell
298 - line_orientations.size(),
302 if (n_unused_singles==0)
315 ExcMemoryInexact (
cells.size(),
used.size()));
334 ExcMemoryInexact (
cells.size(),
used.size()));
354 ExcMemoryInexact (
cells.size(),
used.size()));
387 == line_orientations.size(),
389 line_orientations.size()));
395 template <
typename G>
425 line_orientations.clear();
467 #include "tria_objects.inst" 471 DEAL_II_NAMESPACE_CLOSE
const types::manifold_id flat_manifold_id
std::vector< UserData > user_data
std::size_t memory_consumption() const
void reserve_space(const unsigned int new_quads_in_pairs, const unsigned int new_quads_single=0)
unsigned int next_free_single
UserDataType user_data_type
unsigned int next_free_pair
std::vector< int > children
std::vector< bool > face_flips
#define Assert(cond, exc)
std::vector< RefinementCase< TriaObject< 3 > ::dimension > > refinement_cases
bool reverse_order_next_free_single
void reserve_space(const unsigned int new_objs)
void monitor_memory(const unsigned int true_dimension) const
std::vector< bool > face_orientations
std_cxx11::enable_if< std_cxx11::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
std::vector< BoundaryOrMaterialId > boundary_or_material_id
void monitor_memory(const unsigned int true_dimension) const
std::size_t memory_consumption() const
std::size_t memory_consumption() const
std::vector< types::manifold_id > manifold_id
std::vector< bool > user_flags
std::vector< TriaObject< 3 > > cells
void reserve_space(const unsigned int new_objs_in_pairs, const unsigned int new_objs_single=0)
std::vector< bool > face_rotations