void initialize_fluxes(MGLevelObject<MATRIX>& flux_up,
MGLevelObject<MATRIX>& flux_down);
+ /**
+ * Initialize the matrices
+ * #interface_up and #interface_down
+ * used for local refinement
+ * with continuous
+ * Galerkin methods.
+ */
+
+ void initialize_interfaces(MGLevelObject<MATRIX>& interface_up,
+ MGLevelObject<MATRIX>& interface_down);
/**
* Initialize the local data
* in the
* fine to coarse.
*/
SmartPointer<MGLevelObject<MATRIX>,MGMatrixSimple<MATRIX> > flux_down;
+
+ /**
+ * The matrix used for face
+ * contributions for continuous
+ * elements across the
+ * refinement edge, coupling
+ * coarse to fine.
+ */
+ SmartPointer<MGLevelObject<MATRIX>,MGMatrixSimple<MATRIX> > interface_up;
+
+ /**
+ * The matrix used for face
+ * contributions for continuous
+ * elements across the
+ * refinement edge, coupling
+ * fine to coarse.
+ */
+ SmartPointer<MGLevelObject<MATRIX>,MGMatrixSimple<MATRIX> > interface_down;
/**
* The smallest positive
* level at refinement edges.
*/
std::vector<MatrixPtr> flux_up;
+
+ /**
+ * The interface matrix between
+ * the fine and the coarse
+ * level at refinement edges.
+ */
+ std::vector<MatrixPtr> interface_down;
+
+ /**
+ * The interface matrix between
+ * the coarse and the fine
+ * level at refinement edges.
+ */
+ std::vector<MatrixPtr> interface_up;
/**
* A pointer to the object containing the block structure.
}
+ template <class MATRIX>
+ inline void
+ MGMatrixSimple<MATRIX>::initialize_interfaces(
+ MGLevelObject<MATRIX>& up, MGLevelObject<MATRIX>& down)
+ {
+ interface_up = &up;
+ interface_down = &down;
+ }
+
+
template <class MATRIX >
template <int dim>
inline void
for (unsigned int face_nr=0; face_nr<GeometryInfo<dim>::faces_per_cell; ++face_nr)
if(cell->at_boundary(face_nr))
for(unsigned int j=0; j<dofs_per_face; ++j)
- if (cell_dofs[fe.face_to_cell_index(j,face_nr)] == true) //is this necessary?
+// if (cell_dofs[fe.face_to_cell_index(j,face_nr)] == true) //is this necessary?
boundary_cell_dofs[fe.face_to_cell_index(j,face_nr)] = true;