From: Guido Kanschat Date: Wed, 9 Jul 2003 09:56:29 +0000 (+0000) Subject: first attempt on mgtransfer X-Git-Tag: v8.0.0~16346 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1bf6a70c60a6c5572d46543e1cd1bca6f21992c4;p=dealii.git first attempt on mgtransfer git-svn-id: https://svn.dealii.org/trunk@7864 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/multigrid/Makefile b/tests/multigrid/Makefile index 3155407dca..fb01f0f972 100644 --- a/tests/multigrid/Makefile +++ b/tests/multigrid/Makefile @@ -22,9 +22,10 @@ default: run-tests ############################################################ -mg1.exe : mg1.g.$(OBJEXT) $(lib-2d) $(libraries) +transfer.exe : transfer.g.$(OBJEXT) $(lib-2d) $(libraries) +mg1.exe : mg1.g.$(OBJEXT) $(lib-2d) $(libraries) -tests = mg1 +tests = transfer ############################################################ diff --git a/tests/multigrid/mg1.cc b/tests/multigrid/mg1.cc index fa4c7cf818..5dd839481d 100644 --- a/tests/multigrid/mg1.cc +++ b/tests/multigrid/mg1.cc @@ -40,7 +40,7 @@ MappingQ1<2> mapping; -#include "helmholtz.h" +//#include "helmholtz.h" #include diff --git a/tests/multigrid/transfer.cc b/tests/multigrid/transfer.cc new file mode 100644 index 0000000000..4b9f4c1f27 --- /dev/null +++ b/tests/multigrid/transfer.cc @@ -0,0 +1,140 @@ +//---------------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2000, 2001, 2002, 2003 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. +// +//---------------------------------------------------------------------------- + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +template +void check_simple(const FiniteElement& fe) +{ + deallog << fe.get_name() << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mgdof(tr); + mgdof.distribute_dofs(fe); + + MGTransferPrebuilt transfer; + transfer.build_matrices(mgdof); + + Vector u2(mgdof.n_dofs(2)); + Vector u1(mgdof.n_dofs(1)); + Vector u0(mgdof.n_dofs(0)); + + u0 = 1; + transfer.prolongate(1,u1,u0); + transfer.prolongate(2,u2,u1); + deallog << "u0 " << u0.l2_norm() + << "\tu1 " << u1.l2_norm() + << "\tu2 " << u2.l2_norm(); + u1 = 0.; + u0 = 0.; + transfer.restrict_and_add(2,u1,u2); + transfer.restrict_and_add(1,u0,u1); + deallog << "\tu1 " << u1.l2_norm() + << "\tu0 " << u0.l2_norm() + << std::endl; +} + +template +void check_select(const FiniteElement& fe, + std::vector target_component) +{ + deallog << fe.get_name() << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mgdof(tr); + mgdof.distribute_dofs(fe); + DoFRenumbering::component_wise(mgdof, target_component); + for (unsigned int l=0;l > ndofs(mgdof.get_tria().n_levels()); + MGTools::count_dofs_per_component(mgdof, ndofs, target_component); + for (unsigned int l=0;l transfer; + transfer.build_matrices(mgdof, 0, + target_component); + + Vector u2(ndofs[2][0]); + Vector u1(ndofs[1][0]); + Vector u0(ndofs[0][0]); + + u0 = 1; + transfer.prolongate(1,u1,u0); + transfer.prolongate(2,u2,u1); + deallog << "u0 " << u0.l2_norm() + << "\tu1 " << u1.l2_norm() + << "\tu2 " << u2.l2_norm(); + u1 = 0.; + u0 = 0.; + transfer.restrict_and_add(2,u1,u2); + transfer.restrict_and_add(1,u0,u1); + deallog << "\tu1 " << u1.l2_norm() + << "\tu0 " << u0.l2_norm() + << std::endl; +} + +int main() +{ +// check_simple (FE_DGP<2>(0)); +// check_simple (FE_DGP<2>(1)); + check_simple (FE_DGQ<2>(1)); +// check_simple (FE_DGQ<2>(2)); +// check_simple (FE_Q<2>(1)); +// check_simple (FE_Q<2>(2)); + + std::vector v1(4); + std::vector v2(4); + std::vector v3(4); + for (unsigned int i=0;i<4;++i) + { + v1[i] = i; + v2[i] = 0; + v3[i] = i/2; + } + + check_select (FESystem<2>(FE_DGQ<2>(1), 4), v1); + check_select (FESystem<2>(FE_DGQ<2>(1), 4), v2); + check_select (FESystem<2>(FE_DGQ<2>(1), 4), v3); +}