<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title></title>
</head>
<body style="font-family:Arial;font-size:14px">
<p><br>
Hello,<br>
<br>
Recently I was working with <strong>dune-functions</strong> for implementing interpolation of data during grid adaptation. For this purpose I was looking for a function to return the number of degrees of freedom for subspacebases of a dune-functions basis of the following form:<br>
<br>
Suppose we have two order 1 lagrange bases and a YASPGrid containing only one element. I create a power basis by using<br>
<em>auto basis = makeBasis(grid.leafGridView(), power<2>(lagrange<1>(), flatInterleaved()));</em><br>
<br>
I now want to know how many degrees of freedom the first component of the basis has.<br>
<br>
<em>basis.size()</em> returns 8 as is expected (since each basis includes one Q1 element with 4 DoFs).<br>
<br>
Intuitively I would assume <em>basis.size({0})</em> would return 4, yet it returns 0.<br>
<br>
The problem also occurs when using a composite basis.<br>
<br>
I am using <strong>dune-functions</strong>, <strong>dune-common</strong> and <strong>dune-grid v2.6.0</strong>. My test is included below and was compiled with <strong>g++7.2.0</strong> using a new module generated with <strong>duneproject</strong>.<br>
<br>
<u>Is this the proper behaviour or did I encounter a bug?<br>
<br>
If this is indeed correct <u>behaviour</u>, what function yields the result I am looking for?</u><br>
<br>
<br>
Thanks for your help and have a good day,<br>
<br>
Felix Müller<br>
<br>
<br>
<em>#include <dune/common/filledarray.hh><br>
#include <dune/grid/yaspgrid.hh><br>
#include <dune/functions/functionspacebases/compositebasis.hh><br>
#include <dune/functions/functionspacebases/powerbasis.hh><br>
#include <dune/functions/functionspacebases/lagrangebasis.hh><br>
<br>
using namespace Dune::Functions::BasisFactory;<br>
<br>
int main()<br>
{<br>
  // create grid<br>
  Dune::FieldVector<double, 2> L;<br>
  L = 1.0;<br>
  auto s = Dune::filledArray<2>(1);<br>
  Dune::YaspGrid<2> grid(L, s);<br>
<br>
  // create taylorHood<br>
  auto taylorHood = makeBasis(grid.leafGridView(),<br>
                         composite(power<2>(lagrange<2>(), flatInterleaved()), lagrange<1>(), flatLexicographic()));<br>
  auto L1xL1 = makeBasis(grid.leafGridView(), power<2>(lagrange<1>(), flatInterleaved()));<br>
<br>
  std::cout << "taylorHood.size(): " << taylorHood.size({})          // = 22<br>
            << "\ntaylorHood.size({0}):" << taylorHood.size({0})     // =  0 (expected 18)<br>
  //        << "\ntaylorHood.size({0,0}):" << taylorHood.size({0,0}) // assertion failed (expected 9)<br>
            << "\ntaylorHood.size({1}):" << taylorHood.size({1})     // =  0 (expected 4)<br>
            << "\n";<br>
  std::cout << "L1xL1.size(): " << L1xL1.size({})      // = 8<br>
            << "\nL1xL1.size({0}):" << L1xL1.size({0}) // = 0 (expected 4)<br>
            << "\nL1xL1.size({1}):" << L1xL1.size({1}) // = 0 (expected 4)<br>
            << "\n";<br>
}</em></p>
</body>
</html>