From: Guido Kanschat Date: Sun, 24 Oct 2010 18:10:43 +0000 (+0000) Subject: testing Nedelec and RT X-Git-Tag: v8.0.0~5198 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86b9c7c2c5b1d9dc3841d2648f83279769c4d974;p=dealii.git testing Nedelec and RT git-svn-id: https://svn.dealii.org/trunk@22459 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/fe/internals.cc b/tests/fe/internals.cc index b52a506f63..1e2406e5c2 100644 --- a/tests/fe/internals.cc +++ b/tests/fe/internals.cc @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -161,9 +163,17 @@ main() CHECK_ALL(Q_Hierarchical,2,3); CHECK_ALL(Nedelec, 0, 2); - CHECK_ALL(Nedelec, 0, 3); +// CHECK_ALL(Nedelec, 0, 3); CHECK_ALL(Nedelec, 1, 2); - CHECK_ALL(Nedelec, 1, 3); +// CHECK_ALL(Nedelec, 1, 3); + + CHECK_ALL(RaviartThomas, 0, 2); + CHECK_ALL(RaviartThomas, 0, 3); + CHECK_ALL(RaviartThomas, 1, 2); + CHECK_ALL(RaviartThomas, 1, 3); + + CHECK_ALL(BDM, 1, 2); + CHECK_ALL(BDM, 2, 2); CHECK_SYS1(FE_Q<2>(1),3,2); CHECK_SYS1(FE_DGQ<2>(2),2,2); diff --git a/tests/fe/nedelec.cc b/tests/fe/nedelec.cc index 123d8d921f..5583d07f7b 100644 --- a/tests/fe/nedelec.cc +++ b/tests/fe/nedelec.cc @@ -97,9 +97,9 @@ transform_grid (Triangulation<2> &tria, template inline void -plot_shape_functions(const unsigned int p) +plot_shape_functions(const unsigned int degree) { - FE_Nedelec fe_ned(p); + FE_Nedelec element(degree); Triangulation tr; GridGenerator::hyper_cube(tr, 0., 1.); @@ -109,19 +109,19 @@ plot_shape_functions(const unsigned int p) for (unsigned int transform=0; transform<4; ++transform) { std::ostringstream ost; - ost << "Nedelec" << p << "-Transform" << transform; + ost << "Nedelec" << degree << "-Transform" << transform; deallog.push(ost.str()); transform_grid (tr, transform); DoFHandler dof(tr); typename DoFHandler::cell_iterator c = dof.begin(); - dof.distribute_dofs(fe_ned); + dof.distribute_dofs(element); QTrapez<1> q_trapez; const unsigned int div=2; QIterated q(q_trapez, div); - FEValues fe(fe_ned, q, update_values|update_gradients|update_q_points); + FEValues fe(element, q, update_values|update_gradients|update_q_points); fe.reinit(c); for (unsigned int q_point=0;q_point< q.size();++q_point) @@ -131,7 +131,7 @@ plot_shape_functions(const unsigned int p) // namely x y z u0x u0y u0z u1x... deallog << "value " << q_point << '\t' << fe.quadrature_point(q_point); - for (unsigned int i=0;i (0); - deallog << "Degree 1: " << std::endl; plot_shape_functions<2> (1); return 0; diff --git a/tests/fe/nedelec/cmp/generic b/tests/fe/nedelec/cmp/generic index 413f6c025b..ec5fbc9107 100644 --- a/tests/fe/nedelec/cmp/generic +++ b/tests/fe/nedelec/cmp/generic @@ -1,5 +1,4 @@ -DEAL::Degree 0: DEAL:Nedelec0-Transform0::value 0 0.00 0.00 0 1.00 0 0 1.00 0 0 0 DEAL:Nedelec0-Transform0::gradient 0 0.00 0.00 0 0 -1.00 0 0 0 1.00 0 0 -1.00 0 0 0 1.00 0 0 DEAL:Nedelec0-Transform0::value 1 0.50 0.00 0 0.50 0 0.50 1.00 0 0 0 @@ -100,7 +99,6 @@ DEAL:Nedelec0-Transform3::gradient 8 2.00 1.00 0 0 -0.50 0 0 0 0.50 0 0 -0.50 0 DEAL:Nedelec0-Transform3::value DEAL:Nedelec0-Transform3::gradient DEAL:Nedelec0-Transform3:: -DEAL::Degree 1: DEAL:Nedelec1-Transform0::value 0 0.00 0.00 0 1.00 0 -1.73 0 0 0 0 1.00 0 -1.73 0 0 0 0 0 0 0 0 0 0 0 0 0 DEAL:Nedelec1-Transform0::gradient 0 0.00 0.00 0 0 -1.00 0 0 0 1.73 3.46 0 0 1.00 0 0 0 -1.73 0 0 -1.00 0 0 3.46 1.73 0 0 0 1.00 0 0 0 -1.73 0 0 0 -1.73 0 0 0 3.00 0 0 0 0 -1.73 0 0 0 3.00 0 DEAL:Nedelec1-Transform0::value 1 0.50 0.00 0 0.50 0 -0.87 0 0.50 0 -0.87 1.00 0 0 0 0 0 0 0 0 0 0 0 0 -0.43 0 0.75 diff --git a/tests/fe/nedelec_2.cc b/tests/fe/nedelec_2.cc index 9dc1853f8a..cbae081ade 100644 --- a/tests/fe/nedelec_2.cc +++ b/tests/fe/nedelec_2.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -38,18 +39,33 @@ plot (const Triangulation &tr, const unsigned int p) DoFHandler dof(tr); dof.distribute_dofs(fe_ned); - + // generate some numbers for the // degrees of freedom on this mesh Vector values (dof.n_dofs()); for (unsigned int i=0; i face_dofs(fe_ned.dofs_per_face); + + // Uncomment this to isolate + // boundary degrees of freedom +// if (p==1) +// for (typename DoFHandler::active_cell_iterator +// c = dof.begin_active(); +// c!=dof.end(); ++c) +// for(unsigned int f=0;f::faces_per_cell;++f) +// { +// c->face(f)->get_dof_indices(face_dofs); +// values(face_dofs[0]) = 0; +// values(face_dofs[1]) = 1; +// } // then make sure that hanging node // constraints are taken care of ConstraintMatrix cm; DoFTools::make_hanging_node_constraints (dof, cm); cm.close (); - cm.distribute (values); + cm.distribute (values); // now take these values, and print // the values of this so defined @@ -83,6 +99,17 @@ plot (const Triangulation &tr, const unsigned int p) deallog << std::endl; } + + // Uncomment this to plost solutions +// if (dim==2 && p==1) +// { +// std::ofstream gnuplot_output("test.gpl"); +// DataOut data_out; +// data_out.attach_dof_handler (dof); +// data_out.add_data_vector (values, "u"); +// data_out.build_patches (mapping, 4); +// data_out.write_gnuplot(gnuplot_output); +// } } diff --git a/tests/fe/nedelec_2/cmp/generic b/tests/fe/nedelec_2/cmp/generic index 8097c289be..696558c694 100644 --- a/tests/fe/nedelec_2/cmp/generic +++ b/tests/fe/nedelec_2/cmp/generic @@ -353,21 +353,21 @@ DEAL::, xq=0.25 0.25, f=[422.20 378.49] DEAL:: DEAL:: CELL 2.1 DEAL::, xq=0.25 0.00, f=[-141.63 -106.49] -DEAL::, xq=0.50 0.00, f=[509.63 -5.20] +DEAL::, xq=0.50 0.00, f=[509.63 -3.46] DEAL::, xq=0.25 0.25, f=[-147.48 378.49] -DEAL::, xq=0.50 0.25, f=[531.48 1.73] +DEAL::, xq=0.50 0.25, f=[531.48 0] DEAL:: DEAL:: CELL 2.2 DEAL::, xq=0.00 0.25, f=[-118.20 -165.05] DEAL::, xq=0.25 0.25, f=[422.20 -170.91] -DEAL::, xq=0.00 0.50, f=[-56.33 597.05] -DEAL::, xq=0.25 0.50, f=[61.44 618.91] +DEAL::, xq=0.00 0.50, f=[-26.89 597.05] +DEAL::, xq=0.25 0.50, f=[32.00 618.91] DEAL:: DEAL:: CELL 2.3 DEAL::, xq=0.25 0.25, f=[-147.48 -170.91] -DEAL::, xq=0.50 0.25, f=[531.48 -1.73] -DEAL::, xq=0.25 0.50, f=[2.56 618.91] -DEAL::, xq=0.50 0.50, f=[120.33 5.20] +DEAL::, xq=0.50 0.25, f=[531.48 0] +DEAL::, xq=0.25 0.50, f=[32.00 618.91] +DEAL::, xq=0.50 0.50, f=[90.89 3.46] DEAL:: DEAL::3d, 8 CELLS DEAL:: CELL 1.0 diff --git a/tests/fe/rt_2.cc b/tests/fe/rt_2.cc index a9721b4a2b..e0b5c8ae05 100644 --- a/tests/fe/rt_2.cc +++ b/tests/fe/rt_2.cc @@ -2,7 +2,7 @@ // rt_2.cc,v 1.3 2003/06/09 16:00:38 wolf Exp // Version: // -// Copyright (C) 2003, 2005, 2006, 2009 by the deal.II authors +// Copyright (C) 2003, 2005, 2006, 2009, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -93,7 +93,7 @@ template void plot_shape_functions(const unsigned int degree) { - FE_RaviartThomas fe_rt(degree); + FE_RaviartThomas element(degree); Triangulation tr; GridGenerator::hyper_cube(tr, 0., 1.); @@ -102,58 +102,58 @@ plot_shape_functions(const unsigned int degree) // triangulations for (unsigned int transform=0; transform<4; ++transform) { - deallog << "GRID TRANSFORMATION " << transform << std::endl; + std::ostringstream ost; + ost << "RT" << degree << "-Transform" << transform; + deallog.push(ost.str()); transform_grid (tr, transform); - for (unsigned int v=0; v::vertices_per_cell; ++v) - deallog << "Vertex " << v << ": " - << tr.begin_active()->vertex(v) - << std::endl; - DoFHandler dof(tr); typename DoFHandler::cell_iterator c = dof.begin(); - dof.distribute_dofs(fe_rt); + dof.distribute_dofs(element); QTrapez<1> q_trapez; const unsigned int div=2; QIterated q(q_trapez, div); - FEValues fe(fe_rt, q, update_values|update_gradients|update_q_points); + FEValues fe(element, q, update_values|update_gradients|update_q_points); fe.reinit(c); - unsigned int q_point=0; - for (unsigned int mz=0;mz<=((dim>2) ? div : 0) ;++mz) - for (unsigned int my=0;my<=((dim>1) ? div : 0) ;++my) - for (unsigned int mx=0;mx<=div;++mx) + for (unsigned int q_point=0;q_point< q.size();++q_point) + { + // Output function in + // gnuplot readable format, + // namely x y z u0x u0y u0z u1x... + deallog << "value " << q_point << '\t' << fe.quadrature_point(q_point); + + for (unsigned int i=0;i