16 #ifndef dealii_mg_level_object_h
17 #define dealii_mg_level_object_h
48 template <
class Object>
73 template <
class... Args>
75 const unsigned int maxlevel,
83 const unsigned int maxlevel = 0);
119 template <
class... Args>
122 const unsigned int new_maxlevel,
180 template <
typename ActionFunctionObjectType>
182 apply(ActionFunctionObjectType action);
206 template <
class Object>
207 template <
class... Args>
209 const unsigned int max,
217 template <
class Object>
219 const unsigned int max)
226 template <
class Object>
230 Assert((i >= minlevel) && (i < minlevel + objects.size()),
232 return *objects[i - minlevel];
236 template <
class Object>
240 Assert((i >= minlevel) && (i < minlevel + objects.size()),
242 return *objects[i - minlevel];
246 template <
class Object>
250 return this->operator[](this->max_level());
254 template <
class Object>
255 template <
class... Args>
258 const unsigned int new_maxlevel,
268 minlevel = new_minlevel;
269 for (
unsigned int i = 0; i < new_maxlevel - new_minlevel + 1; ++i)
270 objects.push_back(std::make_shared<Object>(std::forward<Args>(args)...));
274 template <
class Object>
278 typename std::vector<std::shared_ptr<Object>>::iterator v;
279 for (v = objects.begin(); v != objects.end(); ++v)
285 template <
class Object>
294 template <
class Object>
298 typename std::vector<std::shared_ptr<Object>>::iterator v;
299 for (v = objects.begin(); v != objects.end(); ++v)
304 template <
class Object>
312 template <
class Object>
316 return minlevel + objects.size() - 1;
320 template <
class Object>
324 return objects.size();
327 template <
class Object>
328 template <
typename ActionFunctionObjectType>
332 for (
unsigned int lvl = min_level(); lvl <= max_level(); ++lvl)
334 action(lvl, (*
this)[lvl]);
339 template <
class Object>
343 std::size_t result =
sizeof(*this);
344 using Iter =
typename std::vector<std::shared_ptr<Object>>::const_iterator;
345 const Iter
end = objects.end();
346 for (Iter o = objects.begin(); o !=
end; ++o)
347 result += (*o)->memory_consumption();
std::vector< std::shared_ptr< Object > > objects
Object & operator[](const unsigned int level)
MGLevelObject< Object > & operator=(const double d)
MGLevelObject(const unsigned int minlevel, const unsigned int maxlevel, Args &&...args)
MGLevelObject(const unsigned int minlevel=0, const unsigned int maxlevel=0)
const Object & operator[](const unsigned int level) const
void resize(const unsigned int new_minlevel, const unsigned int new_maxlevel, Args &&...args)
std::size_t memory_consumption() const
unsigned int max_level() const
unsigned int min_level() const
const Object & back() const
unsigned int n_levels() const
void apply(ActionFunctionObjectType action)
VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &x, const ::VectorizedArray< Number, width > &y)
VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &x, const ::VectorizedArray< Number, width > &y)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcInternalError()
#define Assert(cond, exc)
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
VectorType::value_type * end(VectorType &V)