plateproblem.h

Go to the documentation of this file.
00001 // PlateProblem
00002 #ifndef _baerbel_plateproblem_h
00003 #define _baerbel_plateproblem_h
00004 
00005 #include <base/convergence_table.h>
00006 #include <base/quadrature_lib.h>
00007 #include <base/function.h>
00008 #include <base/function_lib.h>
00009 #include <base/logstream.h>
00010 #include <base/smartpointer.h>
00011 #include <base/timer.h>
00012 #include <lac/vector.h>
00013 #include <lac/full_matrix.h>
00014 #include <lac/sparse_matrix.h>
00015 #include <lac/sparsity_pattern.h>
00016 #include <lac/solver_gmres.h>
00017 #include <lac/solver_cg.h>
00018 #include <lac/vector_memory.h>
00019 #include <lac/precondition.h>
00020 #include <grid/tria.h>
00021 #include <grid/grid_generator.h>
00022 #include <grid/tria_accessor.h>
00023 #include <grid/tria_iterator.h>
00024 #include <dofs/dof_handler.h>
00025 #include <dofs/dof_accessor.h>
00026 #include <dofs/dof_tools.h>
00027 #include <fe/fe_tools.h>
00028 #include <fe/fe_q.h>
00029 #include <fe/fe_values.h>
00030 #include <numerics/vectors.h>
00031 #include <numerics/solution_transfer.h>
00032 #include <numerics/matrices.h>
00033 #include <numerics/data_out.h>
00034 
00035 #include <grid/grid_in.h>
00036 #include <grid/grid_out.h>
00037 #include <grid/tria_boundary_lib.h>
00038 #include <grid/intergrid_map.h>
00039 
00040 #include <multigrid/multigrid.h>
00041 #include <multigrid/mg_dof_handler.h>
00042 #include <multigrid/mg_dof_accessor.h>
00043 #include <multigrid/mg_transfer.h>
00044 #include <multigrid/mg_tools.h>
00045 #include <multigrid/mg_coarse.h>
00046 #include <multigrid/mg_smoother.h>
00047 #include <multigrid/mg_matrix.h>
00048 
00049 #include <fstream>
00050 #include <numeric>
00051 
00052 #ifdef HAVE_STD_STRINGSTREAM
00053 #  include <sstream>
00054 #else
00055 #  include <strstream>
00056 #endif
00057 
00058 #include "tools.h"
00059 #include "myfunctions.h"
00060 #include "mygrids.h"
00061 #include "playground.h"
00062 #include "compute.h"
00063 //#include "FeGeneralAdini/fe_general_adini.h"
00064 #include "FeAdini/fe_adini.h"
00065 #include "FeC1/fe_c1.h"
00066 
00067 using namespace dealii;
00068 
00069 template <int dim>
00070 class PlateProblem 
00071 {
00072 
00073   public:
00074     PlateProblem (const FiniteElement<dim> &fe);
00075     void run ();
00076 
00077   private:
00078     void   setup_system ();
00079     void   assemble_system ();
00080     void   assemble_multigrid ();
00081     void   solve ();
00082     
00083     void   derivative ();
00084     void   error ();
00085     void   process_solution(const unsigned int cycle, 
00086         const double time_assemble_multigrid, 
00087         const double time_assemble_system, 
00088         const double time_of_solve);
00089     void   output_results (const unsigned int cycle);
00090 
00091     SmartPointer<const FiniteElement<dim> >  fe;
00092     SmartPointer<const FiniteElement<dim> >  fe_ref;
00093     Triangulation<dim>   triangulation;
00094     Triangulation<dim>   triangulation_ref;
00095     MGDoFHandler<dim>    mg_dof_handler;
00096     MGDoFHandler<dim>    mg_dof_handler_ref;
00097     ComputeError<dim>    compute_error;
00098 
00099     SparsityPattern      sparsity_pattern;
00100     SparseMatrix<double> system_matrix;
00101 
00102     MGLevelObject<SparsityPattern> mg_sparsity;
00103     MGLevelObject<SparseMatrix<float> > mg_matrices;
00104 
00105     Playground          konvergenz_tabelle;
00106     Playground          aufwand_tabelle;
00107     
00108     Vector<double>       solution;
00109     Vector<double>       solution_ref;
00110     Vector<double>       solution_interpolated;
00111     Vector<double>       error_of_solution;
00112     Vector<double>       sol_der_x;
00113     Vector<double>       sol_der_y; 
00114     Vector<double>       system_rhs;
00115     Vector<double>       residuum;
00116     Vector<double>       vector_L2_cell_error;
00117     Vector<double>       vector_H1_cell_error;
00118     Vector<double>       vector_H2_cell_error;
00119     Vector<double>       solution_values;
00120     double               L2_error_in_point, L2_error_in_point_old;
00121     double               L2_error_in_midpoint, L2_error_in_midpoint_old;
00122     Tensor<1,dim>        H1_error_in_point, H1_error_in_point_old;
00123     Tensor<1,dim>        H1_error_in_midpoint, H1_error_in_midpoint_old;
00124     Tensor<2,dim>        H2_error_in_point, H2_error_in_point_old;
00125     Tensor<2,dim>        H2_error_in_midpoint, H2_error_in_midpoint_old;
00126     double               global_L2_error, global_L2_error_old;
00127     double               global_H1_error, global_H1_error_old;
00128     double               global_H2_error, global_H2_error_old; 
00129     enum FeName          {fe_c1, fe_adini, fe_general_adini, fe_q};
00130     FeName               fe_name;
00131 };
00132 #endif //_baerbel_plateproblem_h

Generated on Thu Oct 9 14:52:44 2008 for Additional Finite Elements for deal.II by  doxygen 1.5.3