17 #ifndef dealii__mesh_worker_functional_h 18 #define dealii__mesh_worker_functional_h 20 #include <deal.II/algorithms/any_data.h> 21 #include <deal.II/base/smartpointer.h> 22 #include <deal.II/base/mg_level_object.h> 23 #include <deal.II/lac/block_vector.h> 24 #include <deal.II/meshworker/dof_info.h> 25 #include <deal.II/multigrid/mg_constrained_dofs.h> 28 DEAL_II_NAMESPACE_OPEN
43 template <
typename number =
double>
59 template <
class DOFINFO>
65 template<
class DOFINFO>
71 template<
class DOFINFO>
73 const DOFINFO &info2);
78 number
operator() (
const unsigned int i)
const;
93 template <
typename number =
double>
123 template <
class DOFINFO>
129 template<
class DOFINFO>
135 template<
class DOFINFO>
137 const DOFINFO &info2);
142 number
operator() (
const unsigned int i)
const;
149 template <
typename number>
158 template <
typename number>
159 template <
class DOFINFO>
163 info.initialize_numbers(
results.size());
167 template <
typename number>
168 template <
class DOFINFO>
172 for (
unsigned int i=0; i<
results.size(); ++i)
177 template <
typename number>
178 template <
class DOFINFO>
181 const DOFINFO &info2)
183 for (
unsigned int i=0; i<
results.size(); ++i)
191 template <
typename number>
201 template <
typename number>
205 Assert(r.
name(0) ==
"cells", AnyData::ExcNameMismatch(0,
"cells"));
208 Assert(r.
name(1) ==
"faces", AnyData::ExcNameMismatch(1,
"faces"));
214 separate_faces = sep;
217 template <
typename number>
218 template <
class DOFINFO>
226 template <
typename number>
227 template <
class DOFINFO>
232 if (separate_faces &&
238 for (
unsigned int i=0; i<info.n_values(); ++i)
239 v->
block(i)(info.cell->user_index()) += info.value(i);
243 template <
typename number>
244 template <
class DOFINFO>
247 const DOFINFO &info2)
249 for (
unsigned int i=0; i<info1.n_values(); ++i)
254 const double J = info1.value(i) + info2.value(i);
255 v1->
block(i)(info1.face->user_index()) += J;
256 if (info2.face != info1.face)
257 v1->
block(i)(info2.face->user_index()) += J;
262 v0->
block(i)(info1.cell->user_index()) += .5*info1.value(i);
263 v0->
block(i)(info2.cell->user_index()) += .5*info2.value(i);
270 DEAL_II_NAMESPACE_CLOSE
static const unsigned int invalid_unsigned_int
type entry(const std::string &name)
Access to stored data object by name.
#define AssertDimension(dim1, dim2)
void initialize(const unsigned int n)
#define AssertIndexRange(index, range)
void initialize(AnyData &results, bool separate_faces=true)
#define Assert(cond, exc)
void initialize_info(DOFINFO &info, bool face)
void initialize_info(DOFINFO &info, bool face) const
unsigned int n_blocks() const
void assemble(const DOFINFO &info)
std::vector< double > results
BlockType & block(const unsigned int i)
number operator()(const unsigned int i) const
const std::string & name(const unsigned int i) const
Name of object at index.
void assemble(const DOFINFO &info)