};
-//TODO: Unify FiniteElementBase with FiniteElement? There is no clear distinction between the two
+//TODO:[WB] Unify FiniteElementBase with FiniteElement? There is no clear distinction between the two
/**
* Base class for finite elements in arbitrary dimensions. This class
/**
* Discontinuous tensor product elements based on equidistant support points.
-//TODO: Document node numbering etc. copy from old documentation
+//TODO:[GK,RH] Document node numbering etc. copy from old documentation
*/
template <int dim>
class FE_DGQ : public FiniteElement<dim>
/**
* Compute renumbering for rotation
* of degrees of freedom.
-//TODO: meaning of direction=[zZxXyY]
+//TODO:[GK] meaning of direction=[zZxXyY]
*/
void rotate_indices (std::vector<unsigned int> &indices,
const char direction = 'y') const;
* entries in lower dimensions
* are missing.
*/
-//TODO: what good is this, the base class already has it and it seems never to be used!?
+//TODO:[GK] what good is this, the base class already has it and it seems never to be used!?
std::vector<FEValues<dim>*> differences;
};
#include<fe/fe_dgq.h>
-//TODO: briefly document classes and mark them deprecated
+//TODO:[WB,RH] briefly document classes and mark them deprecated
template<int dim> class FEDG_Q0: public FE_DGQ<dim>
#include<fe/fe_q.h>
-//TODO: briefly document classes and mark them deprecated
+//TODO:[WB,RH] briefly document classes and mark them deprecated
template<int dim> class FEQ1: public FE_Q<dim>
/**
* Tensor product elements based on equidistant support points.
-//TODO: Document node numbering etc. copy from old documentation
+//TODO:[RH,GK] Document node numbering etc. copy from old documentation
*/
template <int dim>
class FE_Q : public FiniteElement<dim>
*/
~FE_Q ();
-//TODO: make get_renumber private or move it some other place
+//TODO:[RH] make get_renumber private or move it some other place
/**
* Read-only access to the
* renumber vector.
* constructor of the derived
* class.
*/
-//TODO: What is the meaning of the n_values_array? It is not used in the implementation
+//TODO:[GK] What is the meaning of the n_values_array? It is not used in the implementation
FEValuesBase (const unsigned int n_q_points,
const unsigned int dofs_per_cell,
const unsigned int n_values_array,
-//TODO: (later) doc: laplace_on_quad_vector, compute_laplace_on_quad, etc all
+//TODO:[RH] (later) doc: laplace_on_quad_vector, compute_laplace_on_quad, etc all
// see upcoming paper.
-//TODO: more docs
+//TODO:[RH,GK] more docs
/**
* Mapping class that uses Qp-mappings on boundary cells. The mapping
* shape functions make use of tensor product polynomials with
* Needed by the
* @p{compute_support_points_simple}
*/
-//TODO: (later) remove this function altogether?
+//TODO:[RH] (later) remove this function altogether?
void fill_quad_support_points_simple (const Triangulation<dim>::cell_iterator &cell,
std::vector<Point<dim> > &a) const;
*
* At present, multilevel algorithms are not fully functional, so this
* documentation is still very brief.
-//TODO: Extend MGDoFHandler doc
+//TODO:[WB] Extend MGDoFHandler doc
*
* @author Wolfgang Bangerth, 1998, 1999
*/
#define __deal2__mg_dof_tools_h
-//TODO: Consider incorporating these functions in DoFTools
+//TODO:[?] Consider incorporating these functions in DoFTools (why?)
/**
* This is a collection of functions operating on, and manipulating
* therefore create objects of
* this type as late as possible.
*/
-//TODO: minlevel, maxlevel?
+//TODO:[GK] meaning of minlevel, maxlevel?
Multigrid(const MGDoFHandler<dim> &mg_dof_handler,
const ConstraintMatrix &constraints,
const MGLevelObject<SparsityPattern> &level_sparsities,
/**
* Negative @p{vmult} on a level.
-//TODO: what does this function do?
-* @see MGBase.
-*/
+ * @see MGBase.
+ */
+//TODO:[GK] what does this function do?
virtual void level_vmult (const unsigned int level,
Vector<double> &dest,
const Vector<double> &src,
#include <lac/sparse_matrix.h>
-//TODO: This function needs to be specially implemented, since in 2d mode we use faces
+//TODO:[?] This function needs to be specially implemented, since in 2d mode we use faces
#if deal_II_dimension == 1
template <int dim>
const MGDoFHandler<dim>::active_cell_iterator
level_end = mg_dof_handler->end_active(level);
-//TODO: Treat hanging nodes properly
+//TODO:[?] Treat hanging nodes properly
// The single-level vector is not an FE-function, because the values at
// hanging nodes are set to zero. This should be treated before the restriction.
std::map<unsigned int,double> &boundary_values,
const std::vector<bool> &component_mask = std::vector<bool>());
-//TODO: Update project_boundary_values for more components
-//TODO: Replace FunctionMap
+//TODO:[WB] Update project_boundary_values for more components
+//TODO:[WB] Replace FunctionMap
/**
* Project @p{function} to the boundary
* of the domain, using the given quadrature
* be computed and later
* subtracted.
*/
-// TODO: Implementation of subtract_mean_value is missing.
+//TODO:[GK] Implementation of subtract_mean_value is missing.
static void subtract_mean_value(Vector<double> &v,
const std::vector<bool> &p_select);
}
break;
default:
-//TODO: direction='y' is default, but is not implemented?!
+//TODO:[GK] direction='y' is default, but is not implemented?!
Assert (false, ExcNotImplemented ());
}
}
-//TODO: move build_renumbering to mapping class
+//TODO:[RH] move build_renumbering to mapping class
template <int dim>
FE_Q<dim>::FE_Q (const unsigned int degree)
// do some internal book-keeping
build_renumbering (*this, degree, renumber);
-//TODO: externalize this to a proper template function
+//TODO:[WB] externalize this to a proper template function
#if deal_II_dimension > 1
build_face_renumbering (FiniteElementData<dim-1>(FE_Q<dim-1>::get_dpo_vector(degree),1),
degree,
using namespace std;
#endif
-//TODO: Remove obsolete data->compute_second_derivatives
+
/* ----------------------- FESystem::InternalData ------------------- */
}
-//TODO: remove update_second_derivatives from base elements
template <int dim>
UpdateFlags
// This is a bad workaround as we
// can't ask the FEs for their
// shape values any more.
-// TODO: do this better. don't create a triangulation and dofhandler here!
+// TODO:[RH,GK] do this better. don't create a triangulation and dofhandler here!
// maybe we can get it work by passing an end_iterator or something to the
-// FEValues::reinit function?
+// FEValues::reinit function?
+// (if we have the second FEValues::reinit function, we at least no more need the DoFHandler object)
Triangulation<dim> tria;
DoFHandler<dim> dof_handler(tria);
GridGenerator::hyper_cube(tria);
#endif
-// TODO: replace this by non-global object
+// TODO:[RH,GK] replace this by non-global object
static const MappingQ1<deal_II_dimension> mapping_q1;
template <int dim>
unsigned int
FEValuesBase<dim>::memory_consumption () const
{
-//TODO: check whether this is up to date
+//TODO:[WB] check whether this is up to date
return (MemoryConsumption::memory_consumption (shape_values) +
MemoryConsumption::memory_consumption (shape_gradients) +
MemoryConsumption::memory_consumption (shape_2nd_derivatives) +
/*------------------------------- FEValues -------------------------------*/
-// TODO: unify the two constructor bodies by calling a single function that does all the work
+// TODO:[GK,WB] unify the two constructor bodies by calling a single function that does all the work
template <int dim>
FEValues<dim>::FEValues (const Mapping<dim> &mapping,
const FiniteElement<dim> &fe,
unsigned int
FEValues<dim>::memory_consumption () const
{
-//TODO: check whether this is up to date
+//TODO:[WB] check whether this is up to date
return FEValuesBase<dim>::memory_consumption ();
};
/*------------------------------- FEFaceValues -------------------------------*/
-// TODO: unify the two constructor bodies by calling a single function that does all the work
+// TODO:[GK,WB] unify the two constructor bodies by calling a single function that does all the work
template <int dim>
FEFaceValues<dim>::FEFaceValues (const Mapping<dim> &mapping,
const FiniteElement<dim> &fe,
/*------------------------------- FESubFaceValues -------------------------------*/
-// TODO: unify the two constructor bodies by calling a single function that does all the work
-// TODO: FESubfaceValues constructors are exactly the same as FEFaceValues constructors with exception of calling fe_sub_face_data instead of fe_face_data. Merge!
+// TODO:[GK,WB] unify the two constructor bodies by calling a single function that does all the work
+// TODO:[GK,WB] FESubfaceValues constructors are exactly the same as FEFaceValues constructors with exception of calling fe_sub_face_data instead of fe_face_data. Merge!
template <int dim>
FESubfaceValues<dim>::FESubfaceValues (const Mapping<dim> &mapping,
const FiniteElement<dim> &fe,
Assert (subface_no < GeometryInfo<dim>::subfaces_per_face,
ExcIndexRange (subface_no, 0, GeometryInfo<dim>::subfaces_per_face));
-//TODO: Reinsert this assertion? It tests a necessary, not a sufficient condition
+//TODO:[GK] Reinsert this assertion? It tests a necessary, not a sufficient condition
// Assert (cell->face(face_no)->at_boundary() == false,
// ExcReinitCalledWithBoundaryFace());
std::vector<Point<dim> > &quadrature_points,
std::vector<Point<dim> > &normal_vectors) const
{
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
UpdateFlags update_flags(data.current_update_flags());
const unsigned int npts = quadrature_points.size ();
// equal and are the product of the
// local lengths in each coordinate
// direction
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
double J = data.length[0];
if (d != (normal_directions[face_no]/2))
J *= data.length[d];
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
for (unsigned int i=0; i<JxW_values.size();++i)
JxW_values[i] = J * q.weight(i);
}
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_boundary_forms)
{
for (unsigned int i=0; i<boundary_forms.size();++i)
if (d != (normal_directions[face_no]/2))
J *= data.length[d];
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
for (unsigned int i=0; i<JxW_values.size();++i)
JxW_values[i] = J * q.weight(i) / GeometryInfo<dim>::subfaces_per_face;
}
-//TODO: does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
+//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_boundary_forms)
{
for (unsigned int i=0; i<boundary_forms.size();++i)
if (use_mapping_q_on_all_cells || cell->has_boundary_lines())
compute_support_points_laplace(cell, a);
// compute_support_points_simple(cell, a);
-//TODO: (later) can we delete the previous line?
+//TODO:[RH] (later) can we delete the previous line?
// keep last line for easy
// switching between the two
// possible cases of computing the
-//TODO: (later) remove the following function altogether
+//TODO:[RH] (later) remove the following function altogether
template <int dim>
void
MappingQ<dim>::compute_support_points_simple(const typename Triangulation<dim>::cell_iterator &cell,
// update_boundary_forms is simply
// ignored for the interior of a
// cell.
-//TODO: Consider giving this function information on whether we are on
+//TODO:[RH,GK] Consider giving this function information on whether we are on
// a face.
if (out & (update_JxW_values
|update_normal_vectors))
const std::vector<double> &weights=q.get_weights();
// Multiply quadrature weights
- // by Jaconian determinants
- //TODO: compute Jacobi determinants directly, if co/contravariant is not needed
+ // by Jacobian determinants
+//TODO:[?] compute Jacobi determinants directly, if co/contravariant is not needed
if (update_flags & update_JxW_values)
{
Assert (JxW_values.size() == npts,
{
if (gnuplot_flags.write_cell_numbers)
out << "# cell " << cell << std::endl;
-//TODO: plot level and material according to switches
out << cell->vertex(0)
<< ' ' << cell->level()
{
if (gnuplot_flags.write_cell_numbers)
out << "# cell " << cell << std::endl;
-//TODO: plot level and material according to switches
+
switch (dim)
{
case 1:
case 3:
{
-//TODO: curved boundaries in 3d gnuplot not supported
+//TODO:[RH] curved boundaries in 3d gnuplot not supported
Assert (mapping == 0, ExcNotImplemented());
// front face
{
// curved boundary output
// presently not supported
-//TODO: curved boundaries in eps for 3d
+//TODO:[RH] curved boundaries in eps for 3d
Assert (mapping == 0, ExcNotImplemented());
Triangulation<dim>::active_line_iterator line =tria.begin_active_line ();
// now allocate the needed space
for (unsigned int vertex=0; vertex<tria->vertices.size(); ++vertex)
{
-//TODO: These conditions are violated on unused vertices
+//TODO:[WB,GK] These conditions are violated on unused vertices
Assert (min_level[vertex] < tria->n_levels(), ExcInternalError());
Assert (max_level[vertex] >= min_level[vertex], ExcInternalError());
// now allocate the needed space
for (unsigned int vertex=0; vertex<tria->vertices.size(); ++vertex)
{
-//TODO: These conditions are violated on unused vertices
+//TODO:[WB,GK] These conditions are violated on unused vertices
Assert (min_level[vertex] < tria->n_levels(), ExcInternalError());
Assert (max_level[vertex] >= min_level[vertex], ExcInternalError());
// now allocate the needed space
for (unsigned int vertex=0; vertex<tria->vertices.size(); ++vertex)
{
-//TODO: These conditions are violated on unused vertices
+//TODO:[WB,GK] These conditions are violated on unused vertices
Assert (min_level[vertex] < tria->n_levels(), ExcInternalError());
Assert (max_level[vertex] >= min_level[vertex], ExcInternalError());
// cell
prolongation_sparsities.back().reinit (mg_dof.n_dofs(level+1),
mg_dof.n_dofs(level),
-//TODO: evil hack, must be corrected!
+//TODO:[WB,GK] evil hack, must be corrected!
dofs_per_cell+1);
for (typename MGDoFHandler<dim>::cell_iterator cell=mg_dof.begin(level);
#include <fe/fe_values.h>
#include <fe/mapping_q1.h>
-//TODO: Do this more clever
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
#ifdef DEAL_II_USE_MT
#include <fe/mapping_q1.h>
-//TODO: Do this more clever
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
#ifdef DEAL_II_USE_MT
#include <fe/fe.h>
#include <fe/fe_values.h>
-//TODO: Do this more clever
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
#ifdef DEAL_II_USE_MT
#endif
-//TODO: Comment?? Use proper mapping!
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
#include <cmath>
-//TODO: Comment? Use proper mapping!
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
-//TODO: Comment?? Proper Mapping
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping;
-//TODO: Comment?? Use proper mapping!
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping_q1;
-//TODO: re-create the create_mass_matrix function with 2 args
+//TODO:[RH,GK] maybe re-create the create_mass_matrix function with 2 args
template <int dim>
void MatrixCreator<dim>::create_mass_matrix (const DoFHandler<dim> &dof,
-//TODO: recreate this function
+//TODO:[GK,RH] maybe recreate this function
/*
template <int dim>
-//TODO: Comment?? Use proper mapping!
+//TODO:[RH,GK] Replace global by local object; better: have two functions, or by default arg
static const MappingQ1<deal_II_dimension> mapping_q1;