#ifndef __deal2__mesh_worker_h
#define __deal2__mesh_worker_h
+#include <base/config.h>
#include <base/geometry_info.h>
#include <base/named_data.h>
#include <lac/block_indices.h>
* true.
*/
LocalWorker ();
-
+
/**
* Do the work on a cell.
*/
void cell(DoFInfo<dim>& cell);
-
+
/**
* Do the work on a boundary face.
*/
void bdry(DoFInfo<dim>& face);
-
+
/**
* Do the work on an interior face.
*/
* faces are necessary.
*/
bool interior_fluxes;
-
+
/**
* Computations on interior
* faces are necessary.
*/
- bool boundary_fluxes;
+ bool boundary_fluxes;
};
/**
* cell integrator.
*/
typedef IntegrationInfo<dim, FEValuesBase<dim, dim>, dim> CellInfo;
-
+
/**
* The info type expected by a
* face integrator.
*/
typedef IntegrationInfo<dim, FEFaceValuesBase<dim, dim>, dim> FaceInfo;
-
+
/**
* Initialize default values.
*/
void add_update_flags(const UpdateFlags flags, bool cell = true,
bool bdry = true, bool face = true,
bool ngbr = true);
-
+
/** Assign n-point Gauss
* quadratures to each of the
* quadrature rules. Here, a
* the quadrature points on cells.
*/
MeshWorker::VectorSelector cell_selector;
-
+
/**
* Select the vectors from
* DoFInfo::global_data
* boundary faces.
*/
MeshWorker::VectorSelector bdry_selector;
-
+
/**
* Select the vectors from
* DoFInfo::global_data
* #update_normal_vectors.
*/
UpdateFlags bdry_flags;
-
+
/**
* The set of update flags
* for interior face integration.
* taken from the other cell.
*/
UpdateFlags ngbr_flags;
-
+
/**
* The quadrature rule used
* on cells.
*/
Quadrature<dim> cell_quadrature;
-
+
/**
* The quadrature rule used
* on boundary faces.
*/
Quadrature<dim-1> bdry_quadrature;
-
+
/**
* The quadrature rule used
* on interior faces.
*/
Quadrature<dim-1> face_quadrature;
};
-
-
+
+
/**
* A worker class for integration_loop(), separating assembling and
* local integration. Objects of this class rely on the base class
* integration_loop().
*/
void cell(typename IntegrationWorker<dim>::CellInfo& info);
-
+
/**
* The local boundary operator
* called by
* integration_loop().
*/
void bdry(typename IntegrationWorker<dim>::FaceInfo& info);
-
+
/**
* The interior face operator
* called by
*/
void face(typename IntegrationWorker<dim>::FaceInfo& info1,
typename IntegrationWorker<dim>::FaceInfo& info2);
-
+
private:
/**
* Pointer to the object doing
*/
SmartPointer<const INTEGRATOR> local;
};
-
+
//----------------------------------------------------------------------//
template <int dim>
inline
local(&local, typeid(*this).name())
{}
-
+
template <int dim, class ASSEMBLER, class INTEGRATOR>
inline void
AssemblingIntegrator<dim,ASSEMBLER,INTEGRATOR>::cell(
ASSEMBLER::assemble(info);
}
-
+
template <int dim, class ASSEMBLER, class INTEGRATOR>
inline void
AssemblingIntegrator<dim,ASSEMBLER,INTEGRATOR>::bdry(
ASSEMBLER::assemble(info);
}
-
+
template <int dim, class ASSEMBLER, class INTEGRATOR>
inline void
AssemblingIntegrator<dim,ASSEMBLER,INTEGRATOR>::face(
{
local->face(info1, info2);
ASSEMBLER::assemble(info1, info2);
- }
+ }
}
DEAL_II_NAMESPACE_CLOSE