From: Wolfgang Bangerth Date: Fri, 18 Feb 2011 18:44:17 +0000 (+0000) Subject: Fix a problem with the FE_Nothing element. X-Git-Tag: v8.0.0~4305 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7701855fd72c349ae2a58f512d9167b83ccd052e;p=dealii.git Fix a problem with the FE_Nothing element. git-svn-id: https://svn.dealii.org/trunk@23397 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/doc/news/changes.h b/deal.II/doc/news/changes.h index 105eb1abeb..b3966391e0 100644 --- a/deal.II/doc/news/changes.h +++ b/deal.II/doc/news/changes.h @@ -78,6 +78,12 @@ should be fixed now.

Specific improvements

    +
  1. Fixed: It wasn't possible to use the FE_Nothing element inside an FESystem +object and hand the result over to an FEValues object. This is now fixed. +
    +(Wolfgang Bangerth, 2011/02/18) +
  2. +
  3. New: There is now a function DataOutBase::write_visit_record that does the equivalent for VisIt that DataOutBase::write_pvtu_record does for ParaView: generate a file that contains a list of all other VTK or VTU files of which the diff --git a/deal.II/source/fe/fe_nothing.cc b/deal.II/source/fe/fe_nothing.cc index debdf705d2..facbdce6d8 100644 --- a/deal.II/source/fe/fe_nothing.cc +++ b/deal.II/source/fe/fe_nothing.cc @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 2009 by the deal.II authors +// Copyright (C) 2009, 2011 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -123,7 +123,8 @@ FE_Nothing::get_data (const UpdateFlags /*flags*/, // Create a default data object. Normally we would then // need to resize things to hold the appropriate numbers // of dofs, but in this case all data fields are empty. - typename Mapping::InternalDataBase* data = new typename Mapping::InternalDataBase(); + typename Mapping::InternalDataBase* data + = new typename FiniteElement::InternalDataBase(); return data; } diff --git a/tests/hp/fe_nothing_09.cc b/tests/hp/fe_nothing_09.cc new file mode 100644 index 0000000000..af11beb3b6 --- /dev/null +++ b/tests/hp/fe_nothing_09.cc @@ -0,0 +1,96 @@ +//---------------------------- fe_nothing_09.cc --------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2009, 2011 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. +// +//---------------------------- fe_nothing_09.cc --------------------------- + + +// test that FE_Nothing can be called with interpolate_boundary_values +// with vector elements. this failed at the time of writing the test +// with an internal error + + +#include "../tests.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include + + +template +void test () +{ + Triangulation triangulation; + GridGenerator :: hyper_cube (triangulation, -1, 1); + triangulation.refine_global(1); + + hp::FECollection fe_collection; + fe_collection.push_back (FESystem(FE_Q(1), 2)); + fe_collection.push_back (FESystem(FE_Nothing(), 2)); + + hp::DoFHandler dof_handler (triangulation); + + typename hp::DoFHandler::active_cell_iterator + cell = dof_handler.begin_active(), + endc = dof_handler.end(); + + for(; cell != endc; cell++) + if (cell->center()[0] > 0) + cell->set_active_fe_index(1); + else + cell->set_active_fe_index(0); + + dof_handler.distribute_dofs (fe_collection); + deallog << dof_handler.n_dofs() << " dofs" << std::endl; + + std::map bv; + VectorTools::interpolate_boundary_values (dof_handler, + 0, + ZeroFunction(2), + bv); + for (std::map::iterator + p = bv.begin(); p!=bv.end(); ++p) + deallog << p->first << ' ' << p->second << std::endl; +} + + + +int main () +{ + std::ofstream logfile("fe_nothing_09/output"); + logfile.precision(2); + + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + test<1> (); + test<2> (); + test<3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/fe_nothing_09/cmp/generic b/tests/hp/fe_nothing_09/cmp/generic new file mode 100644 index 0000000000..cd6e4f7767 --- /dev/null +++ b/tests/hp/fe_nothing_09/cmp/generic @@ -0,0 +1,51 @@ + +DEAL::4 dofs +DEAL::0 0 +DEAL::1 0 +DEAL::12 dofs +DEAL::0 0 +DEAL::1 0 +DEAL::2 0 +DEAL::3 0 +DEAL::4 0 +DEAL::5 0 +DEAL::8 0 +DEAL::9 0 +DEAL::10 0 +DEAL::11 0 +DEAL::36 dofs +DEAL::0 0 +DEAL::1 0 +DEAL::2 0 +DEAL::3 0 +DEAL::4 0 +DEAL::5 0 +DEAL::6 0 +DEAL::7 0 +DEAL::8 0 +DEAL::9 0 +DEAL::10 0 +DEAL::11 0 +DEAL::12 0 +DEAL::13 0 +DEAL::16 0 +DEAL::17 0 +DEAL::18 0 +DEAL::19 0 +DEAL::20 0 +DEAL::21 0 +DEAL::22 0 +DEAL::23 0 +DEAL::24 0 +DEAL::25 0 +DEAL::26 0 +DEAL::27 0 +DEAL::28 0 +DEAL::29 0 +DEAL::30 0 +DEAL::31 0 +DEAL::32 0 +DEAL::33 0 +DEAL::34 0 +DEAL::35 0 +DEAL::OK diff --git a/tests/hp/fe_nothing_10.cc b/tests/hp/fe_nothing_10.cc new file mode 100644 index 0000000000..050c16c034 --- /dev/null +++ b/tests/hp/fe_nothing_10.cc @@ -0,0 +1,55 @@ +//---------------------------- fe_nothing_10.cc --------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2009, 2011 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. +// +//---------------------------- fe_nothing_10.cc --------------------------- + + +// an extract of _09 that failed at the time of writing the test +// with an internal error + + +#include "../tests.h" +#include +#include +#include +#include +#include + + +#include + + +template +void test () +{ + FESystem fe(FE_Nothing(), 2); + FEValues fe_values (fe, QGauss(2), update_values); + + deallog << "OK" << std::endl; +} + + + +int main () +{ + std::ofstream logfile("fe_nothing_10/output"); + logfile.precision(2); + + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + test<1> (); + test<2> (); + test<3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/fe_nothing_10/cmp/generic b/tests/hp/fe_nothing_10/cmp/generic new file mode 100644 index 0000000000..5f42bb230f --- /dev/null +++ b/tests/hp/fe_nothing_10/cmp/generic @@ -0,0 +1,5 @@ + +DEAL::OK +DEAL::OK +DEAL::OK +DEAL::OK