00001
00002 #ifndef _baerbel_compute_h
00003 #define _baerbel_compute_h
00004
00005 #include <base/function.h>
00006 #include <base/tensor.h>
00007 #include <dofs/dof_handler.h>
00008 #include <grid/grid_tools.h>
00009 #include <multigrid/mg_dof_handler.h>
00010 #include <lac/sparse_matrix.h>
00011 #include <lac/vector.h>
00012
00013 #include "myfunctions.h"
00014
00015
00016 #include <vector>
00017
00018 using namespace dealii;
00019
00020 template<int dim>
00021 class ComputeError
00022 {
00023 public:
00024 ComputeError ();
00025
00026 void interpolate (const DoFHandler<dim> &dof_handler_coarse,
00027 const Triangulation<dim> &tria_coarse,
00028 const Vector<double> &solution_coarse,
00029 const DoFHandler<dim> &dof_handler_fine,
00030 const Triangulation<dim> &tria_fine,
00031 Vector<double> &solution_interpolated) const;
00032
00033
00034 Vector<double> interpolate_solution (const Function<dim> &exact_solution,
00035 const DoFHandler<dim> &dof_handler);
00036
00037 Vector<double> residuum (SparseMatrix<double> &system_matrix,
00038 Vector<double> &system_rhs,
00039 Vector<double> &solution_values);
00040
00041 void grad (const DoFHandler<dim> &dof_handler,
00042 Vector<double> &solution,
00043 std::vector<Tensor<1, dim> > &grads);
00044
00045 Vector<double> L2_cell_error (const Function<dim> &exact_solution,
00046 const DoFHandler<dim> &dof_handler,
00047 Vector<double> &solution);
00048
00049 double L2_error (Vector<double> &vector_L2_cell_error);
00050 double L2_error_in_point (const Point<dim> &p, const Function<dim> & exact_solution, const DoFHandler<dim> &dof, const Vector<double> &solution);
00051
00052 Vector<double> H1_cell_error (const Function<dim> &exact_solution,
00053 const DoFHandler<dim> &dof_handler,
00054 Vector<double> &solution);
00055
00056 double H1_error (Vector<double> &vector_H1_cell_error);
00057 Tensor<1,dim> H1_error_in_point (const Point<dim> &p, const Function<dim> &exact_solution, const DoFHandler<dim> &dof, Vector<double> &solution);
00058
00059 Tensor<1,dim> derivative_difference (const Point<dim> &p,
00060 const Function<dim> &exact_solution,
00061 const DoFHandler<dim> &dof,
00062 const Vector<double> &solution);
00063
00064 Vector<double> H2_cell_error (const MyFunction<dim> &exact_solution,
00065 const DoFHandler<dim> &dof_handler,
00066 Vector<double> &solution);
00067
00068 double H2_error (Vector<double> &vector_H2_cell_error);
00069 double H2_error_in_midpoint (const Function<dim> &exact_solution, const DoFHandler<dim> &dof, Vector<double> &solution);
00070
00071 Tensor<2,dim> second_derivative_difference (const Point<dim> &p,
00072 const MyFunction<dim> &exact_solution,
00073 const DoFHandler<dim> &dof,
00074 const Vector<double> &solution);
00075
00076 double integrate_difference(const Function<dim> &exact_solution,
00077 const DoFHandler<dim> &dof_handler);
00078
00079 double integrate_difference(const Function<dim> &exact_solution,
00080 const DoFHandler<dim> &dof_handler,
00081 Vector<double> &solution);
00082
00083 void integrate (const DoFHandler<dim> &dof_handler,
00084 Vector<double> &in,
00085 Vector<double> &L2,
00086 Vector<double> &H1,
00087 Vector<double> &H2);
00088
00089 double integrate_solution (const DoFHandler<dim> &dof_handler,
00090 Vector<double> &solution);
00091
00092 Tensor<1,dim> integrate_derivative_of_solution (const DoFHandler<dim> &dof_handler,
00093 Vector<double> &solution);
00094
00095 Tensor<2,dim> integrate_2nd_derivative_of_solution (const DoFHandler<dim> &dof_handler,
00096 Vector<double> &solution);
00097
00098 double integrate_onfaces (const DoFHandler<dim> &dof_handler,
00099 Vector<double> &solution);
00100
00101 double integrate_normal_derivative_onfaces (const DoFHandler<dim> &dof_handler,
00102 Vector<double> &solution);
00103
00104 void difference_function (const DoFHandler<dim> &dof,
00105 const Vector<double> &solution,
00106 const Function<dim> &exact_solution,
00107 Vector<double> &difference);
00108 private:
00109
00110 };
00111
00112 #endif // _baerbel_compute_h