18 #ifndef __deal2__mesh_worker_functional_h 19 #define __deal2__mesh_worker_functional_h 21 #include <deal.II/base/named_data.h> 22 #include <deal.II/base/smartpointer.h> 23 #include <deal.II/base/mg_level_object.h> 24 #include <deal.II/lac/block_vector.h> 25 #include <deal.II/meshworker/dof_info.h> 26 #include <deal.II/multigrid/mg_constrained_dofs.h> 44 template <
typename number =
double>
67 template <
class DOFINFO>
74 template<
class DOFINFO>
81 template<
class DOFINFO>
83 const DOFINFO &info2);
89 number
operator() (
const unsigned int i)
const;
105 template <
typename number =
double>
153 bool separate_faces =
true);
167 template <
class DOFINFO>
174 template<
class DOFINFO>
181 template<
class DOFINFO>
183 const DOFINFO &info2);
189 number
operator() (
const unsigned int i)
const;
196 template <
typename number>
205 template <
typename number>
206 template <
class DOFINFO>
210 info.initialize_numbers(
results.size());
214 template <
typename number>
215 template <
class DOFINFO>
219 for (
unsigned int i=0; i<
results.size(); ++i)
224 template <
typename number>
225 template <
class DOFINFO>
228 const DOFINFO &info2)
230 for (
unsigned int i=0; i<
results.size(); ++i)
238 template <
typename number>
248 template <
typename number>
252 Assert(r.
name(0) ==
"cells",
typename DataVectors::ExcNameMismatch(0,
"cells"));
255 Assert(r.
name(1) ==
"faces",
typename DataVectors::ExcNameMismatch(1,
"faces"));
260 separate_faces = sep;
264 template <
typename number>
265 template <
class DOFINFO>
269 info.initialize_numbers(
results(0)->n_blocks());
273 template <
typename number>
274 template <
class DOFINFO>
278 for (
unsigned int i=0; i<info.n_values(); ++i)
280 if (separate_faces &&
281 info.face_number != deal_II_numbers::invalid_unsigned_int)
282 results(1)->block(i)(info.face->user_index()) += info.value(i);
284 results(0)->block(i)(info.cell->user_index()) += info.value(i);
289 template <
typename number>
290 template <
class DOFINFO>
293 const DOFINFO &info2)
295 for (
unsigned int i=0; i<info1.n_values(); ++i)
299 const double J = info1.value(i) + info2.value(i);
300 results(1)->block(i)(info1.face->user_index()) += J;
301 if (info2.face != info1.face)
302 results(1)->block(i)(info2.face->user_index()) += J;
306 results(0)->block(i)(info1.cell->user_index()) += .5*info1.value(i);
307 results(0)->block(i)(info2.cell->user_index()) += .5*info2.value(i);
314 DEAL_II_NAMESPACE_CLOSE
#define AssertDimension(dim1, dim2)
const std::string & name(unsigned int i) const
Name of object at index.
void initialize(const unsigned int n)
#define AssertIndexRange(index, range)
number operator()(const unsigned int i) const
NamedData< BlockVector< number > * > DataVectors
#define Assert(cond, exc)
void initialize_info(DOFINFO &info, bool face)
void initialize_info(DOFINFO &info, bool face) const
void assemble(const DOFINFO &info)
std::vector< double > results
void initialize(DataVectors &results, bool separate_faces=true)
void assemble(const DOFINFO &info)