From: janssen Date: Wed, 3 Mar 2010 22:30:48 +0000 (+0000) Subject: new tests for MGTransferSelect X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a7ffc07ad71de55d935db4dbb24c96b04da20c1;p=dealii-svn.git new tests for MGTransferSelect git-svn-id: https://svn.dealii.org/trunk@20735 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/multigrid/transfer_system_04.cc b/tests/multigrid/transfer_system_04.cc new file mode 100644 index 0000000000..6f99ca3b1d --- /dev/null +++ b/tests/multigrid/transfer_system_04.cc @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------------- +// transfer.cc,v 1.13 2005/12/30 16:07:03 guido Exp +// Version: +// +// Copyright (C) 2000 - 2007, 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 +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------------------------------------------------------- + +// like _03, but with a TransferSelect that selects the first two vector components as the first block + +#include "../tests.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; + +template +void +reinit_vector (const dealii::MGDoFHandler &mg_dof, + MGLevelObject > &v) +{ + for (unsigned int level=v.get_minlevel(); + level<=v.get_maxlevel();++level) + { + unsigned int n = mg_dof.n_dofs (level); + v[level].reinit(n); + } + +} + + +template +void +make_matrix (const Transfer &transfer, + const unsigned int high_level, + FullMatrix &matrix) +{ + Vector src (matrix.n()); + Vector dst (matrix.m()); + for (unsigned int i=0; i &m) +{ + for (unsigned int i=0; i +void check (const FiniteElement& fe) +{ + deallog << fe.get_name() << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mg_dof_handler(tr); + mg_dof_handler.distribute_dofs(fe); + + std::vector block_component(3,0); + block_component[2]=1; + + DoFRenumbering::component_wise (mg_dof_handler, block_component); + for (unsigned int level=0; level transfer; + + transfer.build_matrices(mg_dof_handler, mg_dof_handler, + 0, 0, + block_component, block_component); + + // use only the first half of all + // components + std::vector > dofs_per_block(tr.n_levels(), std::vector(2)); + MGTools::count_dofs_per_block(mg_dof_handler, dofs_per_block, block_component); + FullMatrix prolong_0_1 (dofs_per_block[1][0],dofs_per_block[0][0]); + FullMatrix prolong_1_2 (dofs_per_block[2][0],dofs_per_block[1][0]); + + deallog << "Level 0->1" << std::endl; + make_matrix (transfer, 1, prolong_0_1); + print_matrix (prolong_0_1); + + deallog << std::endl; + + deallog << "Level 1->2" << std::endl; + make_matrix (transfer, 2, prolong_1_2); + print_matrix (prolong_1_2); +} + + +int main() +{ + std::ofstream logfile("transfer_system_04/output"); + deallog << std::setprecision(4); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + +//TODO: do in 1d + check (FESystem<2>(FE_Q<2>(1),3)); +} diff --git a/tests/multigrid/transfer_system_04/cmp/generic b/tests/multigrid/transfer_system_04/cmp/generic new file mode 100644 index 0000000000..40097b80da --- /dev/null +++ b/tests/multigrid/transfer_system_04/cmp/generic @@ -0,0 +1,73 @@ + +DEAL::FESystem<2>[FE_Q<2>(1)^2] +DEAL::Level 0->1 +DEAL::1.000 0 0 0 0 0 0 0 +DEAL::0.5000 0.5000 0 0 0 0 0 0 +DEAL::0.5000 0 0.5000 0 0 0 0 0 +DEAL::0.2500 0.2500 0.2500 0.2500 0 0 0 0 +DEAL::0 1.000 0 0 0 0 0 0 +DEAL::0 0.5000 0 0.5000 0 0 0 0 +DEAL::0 0 1.000 0 0 0 0 0 +DEAL::0 0 0.5000 0.5000 0 0 0 0 +DEAL::0 0 0 1.000 0 0 0 0 +DEAL::0 0 0 0 1.000 0 0 0 +DEAL::0 0 0 0 0.5000 0.5000 0 0 +DEAL::0 0 0 0 0.5000 0 0.5000 0 +DEAL::0 0 0 0 0.2500 0.2500 0.2500 0.2500 +DEAL::0 0 0 0 0 1.000 0 0 +DEAL::0 0 0 0 0 0.5000 0 0.5000 +DEAL::0 0 0 0 0 0 1.000 0 +DEAL::0 0 0 0 0 0 0.5000 0.5000 +DEAL::0 0 0 0 0 0 0 1.000 +DEAL:: +DEAL::Level 1->2 +DEAL::1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.2500 0.2500 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.5000 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.2500 0 0.2500 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.5000 0 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.2500 0.2500 0 0 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.5000 0 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.2500 0 0.2500 0 0.2500 0.2500 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0.5000 0 0 0.5000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.2500 0.2500 0.2500 0.2500 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0.5000 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.2500 0 0.2500 0.2500 0.2500 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0 0.5000 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.2500 0.2500 0 0 0.2500 0.2500 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0 0.5000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.2500 0 0.2500 0 0.2500 0.2500 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0.5000 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 diff --git a/tests/multigrid/transfer_system_05.cc b/tests/multigrid/transfer_system_05.cc new file mode 100644 index 0000000000..a01524824f --- /dev/null +++ b/tests/multigrid/transfer_system_05.cc @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------------- +// transfer.cc,v 1.13 2005/12/30 16:07:03 guido Exp +// Version: +// +// Copyright (C) 2000 - 2007, 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 +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------------------------------------------------------- + +// like _04, but checks the copy_to_mg and copy_from_mg of MGTransferSelect + +#include "../tests.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; + + +template +void check (const FiniteElement& fe, const unsigned int selected_block) +{ + deallog << fe.get_name() << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mg_dof_handler(tr); + mg_dof_handler.distribute_dofs(fe); + + std::vector block_component(5,0); + block_component[2]=1; + block_component[3]=1; + block_component[4]=2; + + DoFRenumbering::component_wise (mg_dof_handler, block_component); + for (unsigned int level=0; level transfer; + + transfer.build_matrices(mg_dof_handler, mg_dof_handler, + selected_block, selected_block, + block_component, block_component); + + // use only the first half of all + // components + std::vector dofs_per_block(3); + DoFTools::count_dofs_per_block(mg_dof_handler, dofs_per_block, block_component); + std::vector > mg_dofs_per_block(tr.n_levels(), std::vector(3)); + MGTools::count_dofs_per_block(mg_dof_handler, mg_dofs_per_block, block_component); + + deallog << "Global dofs:"; + for (unsigned int i=0;i u; + u.reinit (dofs_per_block); + for (unsigned int i=0;i > v(0,tr.n_levels()-1); + for(unsigned int l=0; l(FE_Q<2>(1),5),0); + check (FESystem<2>(FE_Q<2>(1),5),1); + check (FESystem<2>(FE_Q<2>(1),5),2); +} diff --git a/tests/multigrid/transfer_system_05/cmp/generic b/tests/multigrid/transfer_system_05/cmp/generic new file mode 100644 index 0000000000..40097b80da --- /dev/null +++ b/tests/multigrid/transfer_system_05/cmp/generic @@ -0,0 +1,73 @@ + +DEAL::FESystem<2>[FE_Q<2>(1)^2] +DEAL::Level 0->1 +DEAL::1.000 0 0 0 0 0 0 0 +DEAL::0.5000 0.5000 0 0 0 0 0 0 +DEAL::0.5000 0 0.5000 0 0 0 0 0 +DEAL::0.2500 0.2500 0.2500 0.2500 0 0 0 0 +DEAL::0 1.000 0 0 0 0 0 0 +DEAL::0 0.5000 0 0.5000 0 0 0 0 +DEAL::0 0 1.000 0 0 0 0 0 +DEAL::0 0 0.5000 0.5000 0 0 0 0 +DEAL::0 0 0 1.000 0 0 0 0 +DEAL::0 0 0 0 1.000 0 0 0 +DEAL::0 0 0 0 0.5000 0.5000 0 0 +DEAL::0 0 0 0 0.5000 0 0.5000 0 +DEAL::0 0 0 0 0.2500 0.2500 0.2500 0.2500 +DEAL::0 0 0 0 0 1.000 0 0 +DEAL::0 0 0 0 0 0.5000 0 0.5000 +DEAL::0 0 0 0 0 0 1.000 0 +DEAL::0 0 0 0 0 0 0.5000 0.5000 +DEAL::0 0 0 0 0 0 0 1.000 +DEAL:: +DEAL::Level 1->2 +DEAL::1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0.2500 0.2500 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.5000 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0.2500 0 0.2500 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.5000 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.5000 0 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0.2500 0.2500 0 0 0.2500 0.2500 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.5000 0 0 0 0.5000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0.2500 0 0.2500 0 0.2500 0.2500 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0.5000 0 0 0.5000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0.2500 0.2500 0.2500 0.2500 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0.5000 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0.2500 0 0.2500 0.2500 0.2500 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0.5000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0 0.5000 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0.2500 0.2500 0 0 0.2500 0.2500 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0 0.5000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000 0 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0.2500 0 0.2500 0 0.2500 0.2500 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0 0 0.5000 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5000 0.5000 +DEAL::0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.000