From 6986c49ac237d3af85a7ae6635742ab7735503e9 Mon Sep 17 00:00:00 2001 From: wolf Date: Thu, 13 Jun 2002 13:30:51 +0000 Subject: [PATCH] Do the right thing in 1d for has_support_on_face git-svn-id: https://svn.dealii.org/trunk@6095 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/fe/fe_q.cc | 127 ++++++++++++++---------------- deal.II/doc/news/2002/c-3-4.html | 15 +++- 2 files changed, 69 insertions(+), 73 deletions(-) diff --git a/deal.II/deal.II/source/fe/fe_q.cc b/deal.II/deal.II/source/fe/fe_q.cc index edd1802fce..37a0d34288 100644 --- a/deal.II/deal.II/source/fe/fe_q.cc +++ b/deal.II/deal.II/source/fe/fe_q.cc @@ -1314,79 +1314,66 @@ FE_Q::has_support_on_face (const unsigned int shape_index_, ExcIndexRange (face_index, 0, GeometryInfo::faces_per_cell)); unsigned int shape_index = shape_index_; - + + // in 1d, things are simple. since + // there is only one degree of + // freedom per vertex in this + // class, the first is on vertex 0 + // (==face 0 in some sense), the + // second on face 1: if (dim==1) - return true; - const unsigned int cell_start = (dim==2) - ? first_quad_index - : first_hex_index; - const unsigned int face_start = (dim==2) - ? first_line_index - : first_quad_index; - - // Interior degrees of - // freedom correspond to - // shape functions with - // support inside the cell. - if (shape_index >= cell_start) - return false; - // Shape functions are sorted - // by face. If we dived by - // the number of shapes per - // face, the result must be - // equal to the face index. - if (shape_index >= face_start) - { - shape_index -= first_line_index; - shape_index /= dofs_per_face; - return (shape_index == face_index); - } - // Only degrees of freedom on - // a vertex are left. - shape_index /= dofs_per_vertex; - // Use a table to figure out - // which face is neighbor to - // which vertex. - switch (100*dim+10*face_index+shape_index) + return (((shape_index == 0) && (face_index == 0)) || + ((shape_index == 1) && (face_index == 1))); + else + // more dimensions { - case 200: - case 230: - case 201: - case 211: - case 212: - case 222: - case 223: - case 233: - case 300: - case 320: - case 350: - case 301: - case 321: - case 331: - case 302: - case 332: - case 342: - case 303: - case 343: - case 353: - case 314: - case 324: - case 354: - case 315: - case 325: - case 335: - case 316: - case 336: - case 346: - case 317: - case 347: - case 357: - return true; - default: + const unsigned int cell_start = (dim==2) + ? first_quad_index + : first_hex_index; + const unsigned int face_start = (dim==2) + ? first_line_index + : first_quad_index; + + // Interior degrees of + // freedom correspond to + // shape functions with + // support inside the cell. + if (shape_index >= cell_start) return false; - } - return true; -} + // Shape functions are sorted + // by face. If we dived by + // the number of shapes per + // face, the result must be + // equal to the face index. + if (shape_index >= face_start) + { + shape_index -= first_line_index; + shape_index /= dofs_per_face; + return (shape_index == face_index); + } + // Only degrees of freedom on + // a vertex are left. + shape_index /= dofs_per_vertex; + // Use a table to figure out + // which face is neighbor to + // which vertex. + switch (100*dim+10*face_index+shape_index) + { + case 200: case 230: case 201: case 211: + case 212: case 222: case 223: case 233: + case 300: case 320: case 350: case 301: + case 321: case 331: case 302: case 332: + case 342: case 303: case 343: case 353: + case 314: case 324: case 354: case 315: + case 325: case 335: case 316: case 336: + case 346: case 317: case 347: case 357: + return true; + default: + return false; + } + return true; + }; +}; diff --git a/deal.II/doc/news/2002/c-3-4.html b/deal.II/doc/news/2002/c-3-4.html index 50c6aa2f5a..30dbab888e 100644 --- a/deal.II/doc/news/2002/c-3-4.html +++ b/deal.II/doc/news/2002/c-3-4.html @@ -105,6 +105,15 @@ contributor's names are abbreviated by WB (Wolfgang Bangerth), GK

deal.II

    +
  1. Fixed: FE_Q::has_support_on_face always returned + true in 1d, partly because faces are not really an issue in + 1d. It now does so only when the support point of the + respective shape function is actually the requested vertex. +
    + (WB 2002/06/13) +

    +
  2. New: The existing FETools::interpolate, FETools::back_interpolate and -

  3. Change: The constructor of

    Changed: The constructor of DoFHandler now takes a reference to a const Triangulation.
    (RH 2002/06/12)

    -
  4. Change: The constructors of all

    Changed: The constructors of all DoFAccessor, TriaAccessor and TriaIterator classes now take pointers to @@ -137,7 +146,7 @@ contributor's names are abbreviated by WB (Wolfgang Bangerth), GK (RH 2002/06/12)

    -
  5. Change:

    Changed: Triangulation::clear_user_flags and Triangulation::clear_user_pointers are now const functions. -- 2.39.5