+++ /dev/null
-=================================================================
-====== Things to be done for the deal.II library ================
-=================================================================
-
-Reorganize GridOut class. Either templatize GridOut or remove template
- from EpsFlags
-
-
-Remove the comment signs in the monitor_* functions in tria.cc
- as early as possible. These were inserted, since at home the
- program did some strange things in the reserve_memory
- functions (allocated more memory than told), such that the
- memory checks failed.
-
-
-Write monitors to control whether enough memory was allocated for
- the vectors (i.e. after a process, whether size()==capacity()).
- (for DoF)
-
-
-Check usage of vector<>s: functions should assume that the objects have
- the right size already.
-
-
-Remove FiniteElementData<>::operator == and let it be generated
- implicitely.
-
-
-Look at the fill_fe_values functions for possible optimizations
- since this is one of the most often called functions.
-
-
-In VectorTools::project_boundary_values, no condensation of sparsity
- structures, matrices and right hand sides or distribution of
- solution vectors is performed. This is ok for dim<3 because then
- there are no constrained nodes on the boundary, but is not
- acceptable for higher dimensions. Fix this.
-
-
-Implement the random distortion in Triangulation for hanging nodes
- also. Hanging nodes need to be reset to the correct mean value
- at the end, which is simple for 2D but difficult for 3D. Maybe take
- a look at how we get to the original location of the point in the
- execute_refinement function and copy the relevant lines.
-
-
-Review DoFCellAccessor<dim>::get_interpolated_dof_values: it may be
- necessary to write not the non-zero values, but those for which
- the corresponding row of the transfer (restriction) matrix
- has nonzero entries. This also catches those zeroes which should
- really be written but are not because the nodal value was zero.
-
-
-Add tests in Triangulation<3>::create_triangulation for faces (quads)
- which are entered twice: once and once again in a rotated or
- mirrored direction.
-
-
-Better estimates for DoFHandler<3>::max_couplings_between_dofs
-
-
-Check optimized code with -Winline and act accordingly. Unfortunately,
- most warnings are from the STL.
-
-
-Unify lots of code of the two Cuthill-McKee dof renumbering functions
- in numerics/dof_renumbering.cc. This should be rather
- straightforward, since all the unified code needs to get is a
- sparsity structure, possibly compressed and return a vector
- of numbers. Simple task.
-
-
-Add support for MGTransferPrebuilt and MGSmoother if a user wants
- to solve exactly on another than the coarsest grid. In this case,
- some matrices and other arrays need not be computed.
-
-
-Fix MGTransferPrebuilt::build_matrices, think about diagonals in
- square sparse matrices.
-
-
-In GridOut::write_ucd, a vector of vertices is built along with
- another vector stating which of these are used. These are actually
- the same arrays as exist already in the triangulation, but I did not
- want to write just another access function. However, someone should
- take a look whether re-building these arrays is a large wast of
- computing time and memory, or whether it is justifiable.
-
-
-Fix a potential problem with viewing angles in 3d Eps GridOut (see
- comment)
-
-
-Move the TriaNumberCache into the Triangulation class once the
- compiler supports this (gcc2.95 does not allow this at present)
-
-
-Why is dof_renumbering.h in include/numerics, but dof_renumbering.cc
- in source/dofs??
-
-
-DataOut determines whether something is a DoF or cell vector by the
- size of the vector. This will fail if someone is using DG0 elements,
- since there the number of elements of both types of vectors is the
- same, but the ordering will usually differ. Errors cannot be plotted
- anyway, since they are float vectors.
* me (WB) why we have to declare and implement
* this one explicitely.
*/
+//TODO:[WB] remove operator and let the compiler generate it as soon as it is willing to do so
bool operator == (const FiniteElementData<dim> &) const;
/**
#define __deal2__grid_out_h
+//TODO:[WB]Reorganize GridOut class. Either templatize GridOut or remove template from EpsFlags
+
+
#include <base/exceptions.h>
#include <string>
/*------------------------------------------------------------------------*/
+//TODO:[WB] Move the TriaNumberCache into the Triangulation class
+// once the compiler supports this (gcc2.95 does not allow this at present)
+
+
+
/**
* Cache class used to store the number of used and active elements
* (lines or quads etc) within the levels of a triangulation. This
/*---------------------------- tria-iterator.h ---------------------------*/
+//TODO:[WB] Change <iostream> to <ostream> when that becomes available
#include <iterator>
#include <iostream>
#include <base/exceptions.h>
#define __deal2__data_out_h
+//TODO:[?] DataOut determines whether something is a DoF or cell vector by the size of the vector.
+// This will fail if someone is using DG0 elements,
+// since there the number of elements of both types of vectors is the
+// same, but the ordering will usually differ. Errors cannot be plotted
+// anyway, since they are float vectors.
+
+
+
#include <base/smartpointer.h>
#include <base/multithread_info.h>
#include <base/data_out_base.h>
#if deal_II_dimension == 1
template <>
-unsigned int DoFHandler<1>::max_couplings_between_dofs () const {
+unsigned int DoFHandler<1>::max_couplings_between_dofs () const
+{
Assert (selected_fe != 0, ExcNoFESelected());
return std::min(3*selected_fe->dofs_per_vertex +
2*selected_fe->dofs_per_line, n_dofs());
};
+
template <>
-unsigned int DoFHandler<1>::max_couplings_between_boundary_dofs () const {
+unsigned int DoFHandler<1>::max_couplings_between_boundary_dofs () const
+{
Assert (selected_fe != 0, ExcNoFESelected());
Assert (false, ExcInternalError());
return 0;
#if deal_II_dimension == 2
template <>
-unsigned int DoFHandler<2>::max_couplings_between_dofs () const {
+unsigned int DoFHandler<2>::max_couplings_between_dofs () const
+{
Assert (selected_fe != 0, ExcNoFESelected());
// get these numbers by drawing pictures
};
+
template <>
-unsigned int DoFHandler<2>::max_couplings_between_boundary_dofs () const {
+unsigned int DoFHandler<2>::max_couplings_between_boundary_dofs () const
+{
Assert (selected_fe != 0, ExcNoFESelected());
return 3*selected_fe->dofs_per_vertex + 2*selected_fe->dofs_per_line;
};
#if deal_II_dimension == 3
template <>
-unsigned int DoFHandler<3>::max_couplings_between_dofs () const {
+unsigned int DoFHandler<3>::max_couplings_between_dofs () const
+{
+//TODO:[?] Invent significantly better estimates than the ones in this function
Assert (selected_fe != 0, ExcNoFESelected());
// doing the same thing here is a rather
//---------------------------- dof_renumbering.cc ---------------------------
+//TODO:[WB] Unify lots of code of the two Cuthill-McKee dof renumbering functions
+// This should be rather
+// straightforward, since all the unified code needs to get is a
+// sparsity structure, possibly compressed and return a vector
+// of numbers. Simple task.
+
#include <lac/sparsity_pattern.h>
#include <dofs/dof_accessor.h>
#include <grid/tria_iterator.h>
void GridOut::write_ucd (const Triangulation<dim> &tria,
std::ostream &out)
{
+//TODO:[WB] In GridOut::write_ucd, a vector of vertices is built along with
+// another vector stating which of these are used. These are actually
+// the same arrays as exist already in the triangulation, but I did not
+// want to write just another access function. However, someone should
+// take a look whether re-building these arrays is a large waste of
+// computing time and memory, or whether it is justifiable.
+
AssertThrow (out, ExcIO());
typename Triangulation<dim>::active_cell_iterator cell=tria.begin_active();
// we chose here the viewpoint as in
// gnuplot as default.
//
+//TODO:[WB] Fix a potential problem with viewing angles in 3d Eps GridOut
// note: the following might be wrong
// if one of the base vectors below
// is in direction of the viewer, but
//---------------------------- tria.all_dimensions.cc ---------------------------
+//TODO:[WB]Remove the comment signs in the monitor_* functions
+// as early as possible. These were inserted, since at home the
+// program did some strange things in the reserve_memory
+// functions (allocated more memory than told), such that the
+// memory checks failed.
+
+
#include <base/memory_consumption.h>
#include <grid/tria.h>
#include <grid/tria_levels.h>
const std::vector<CellData<3> > &c,
const SubCellData &subcelldata)
{
+//TODO:[?]Add tests in Triangulation<3>::create_triangulation for faces (quads)
+// which are entered twice: once and once again in a rotated or
+// mirrored direction.
+
const unsigned int dim=3;
Assert (vertices.size() == 0, ExcTriangulationNotEmpty());
void Triangulation<dim>::distort_random (const double factor,
const bool keep_boundary)
{
- // this function is mostly equivalent to
- // that for the general dimensional case
- // the only difference being the correction
- // for split faces which is not necessary
- // in 1D
+//TODO:[?]Implement the random distortion in Triangulation for hanging nodes as well
+// Hanging nodes need to be reset to the correct mean value
+// at the end, which is simple for 2D but difficult for 3D. Maybe take
+// a look at how we get to the original location of the point in the
+// execute_refinement function and copy the relevant lines.
+
+ // this function is mostly
+ // equivalent to that for the
+ // general dimensional case the
+ // only difference being the
+ // correction for split faces which
+ // is not necessary in 1D
//
// if you change something here, don't
// forget to do so there as well
Vector<double> &,
const bool ,
const Quadrature<0> &,
- const bool ) {
+ const bool )
+{
// this function should easily be implemented
// using the template below. However some
// changes have to be made since faces don't
const Quadrature<dim-1> &q,
std::map<unsigned int,double> &boundary_values)
{
+//TODO:[?] In VectorTools::project_boundary_values, no condensation of sparsity
+// structures, matrices and right hand sides or distribution of
+// solution vectors is performed. This is ok for dim<3 because then
+// there are no constrained nodes on the boundary, but is not
+// acceptable for higher dimensions. Fix this.
+
Assert (dof.get_fe().n_components() == boundary_functions.begin()->second->n_components,
ExcComponentMismatch());